Читаем Rust на примерах полностью

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="Атрибут_derive"><strong><a l:href="#Атрибут_derive">Атрибут</a><a l:href="#Атрибут_derive">Derive</a></strong></p>

Компилятор способен предоставить основные реализации для некоторых типажей с помощью атрибута #[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

<p id="Смотрите_также_54"><strong><a l:href="#Смотрите_также_54">Смотрите также:</a></strong></p>

derive

<p id="Возврат_типажа_с_dyn"><strong><a l:href="#Возврат_типажа_с_dyn">Возврат типажа с</a><a l:href="#Возврат_типажа_с_dyn">dyn</a></strong></p>
Перейти на страницу:

Похожие книги

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Дэвид Уэзеролл , Ник Фимстер , Эндрю Таненбаум

Учебные пособия, самоучители