Атрибут #[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,
которое позволяет сравнивать структуры