Атрибут Derive

Компилятор способен предоставить основные реализации для некоторых типажей с помощью атрибута #[derive]. Эти типажи могут быть реализованы вручную, если необходимо более сложное поведение.

Ниже приводится список выводимых типажей:

• Типажи сравнения:Eq, PartialEq, Ord, PartialOrd

• Clone, для создания T из &T с помощью копии.

• Copy, чтобы создать тип семантикой копирования, вместо семантики перемещения.

• Hash, чтобы вычислить хеш из &T.

• Default, чтобы создать пустой экземпляр типа данных.

• Debug, чтобы отформатировать значение с помощью {:?}.

// `Centimeters`, кортежная структура, которую можно сравнить

#[derive(PartialEq, PartialOrd)]

struct Centimeters(f64);

// `Inches`, кортежная структура, которую можно напечатать

#[derive(Debug)]

struct Inches(i32);

impl Inches {

fn to_centimeters(&self) -> Centimeters {

let &Inches(inches) = self;

Centimeters(inches as f64 * 2.54)

}

}

// `Seconds`, кортежная структура без дополнительных атрибутов

struct Seconds(i32);

fn main() {

let _one_second = Seconds(1);

// Ошибка: `Seconds` не может быть напечатана; не реализован типаж `Debug`

//println!("Одна секунда выглядит как: {:?}", _one_second);

// ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку

// Ошибка: `Seconds` нельзя сравнить; не реализован типаж `PartialEq`

//let _this_is_true = (_one_second == _one_second);

// ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку

let foot = Inches(12);

println!("Один фут равен {:?}", foot);

let meter = Centimeters(100.0);

let cmp =

if foot.to_centimeters() < meter {

"меньше"

} else {

"больше"

};

println!("Один фут {} одного метра.", cmp);

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Смотрите также:

derive

Загрузка...