РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
518 of 1245 menu

Атрибут #[derive]

Атрибут #[derive] позволяет автоматически реализовать стандартные трейты для структуры. Параметром атрибут принимает список трейтов, которые нужно реализовать. Например, Debug, Clone, Copy, PartialEq, Eq, Hash, Default.

Синтаксис

#[derive(Trait1, Trait2, ...)] struct StructName { field1: Type1, field2: Type2, }

Пример

Давайте создадим структуру с атрибутом #[derive(Debug)] и выведем её на экран:

#[derive(Debug)] struct Point { x: i32, y: i32, } fn main() { let p = Point { x: 1, y: 2 }; println!("{:?}", p); }

Результат выполнения кода:

Point { x: 1, y: 2 }

Пример

Давайте создадим структуру с несколькими производными трейтами и проверим их работу:

#[derive(Debug, Clone, PartialEq)] struct Point { x: i32, y: i32, } fn main() { let p1 = Point { x: 1, y: 2 }; let p2 = p1.clone(); let res = p1 == p2; println!("{:?}", res); }

Результат выполнения кода:

true

Пример

Давайте создадим структуру с трейтом Default и получим значение по умолчанию:

#[derive(Debug, Default)] struct Point { x: i32, y: i32, } fn main() { let p = Point::default(); println!("{:?}", p); }

Результат выполнения кода:

Point { x: 0, y: 0 }

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

  • структура struct,
    которая создаёт обычную структуру
  • кортежная структура tuple-struct,
    которая создаёт кортежную структуру
  • доступ к полям field-access,
    который позволяет обращаться к полям структуры
  • сравнение структур compare,
    которое позволяет сравнивать структуры
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить