Атрибут #[derive]
Атрибут #[derive] позволяет компилятору
автоматически сгенерировать реализацию указанных
типажей для структуры или перечисления. Параметром
атрибут принимает список типажей, которые нужно
реализовать. Это избавляет разработчика от
необходимости писать шаблонный код вручную.
Синтаксис
#[derive(Trait1, Trait2, ...)]
struct MyStruct
{
// поля структуры
}
Пример
Давайте реализуем типаж Debug для структуры
Point с помощью атрибута #[derive]:
#[derive(Debug)]
struct Point
{
x: i32,
y: i32,
}
fn main()
{
let p = Point { x: 1, y: 2 };
println!("{:?}", p);
}
Результат выполнения кода:
Point { x: 1, y: 2 }
Пример
Давайте реализуем типажи Clone и PartialEq
для структуры Pair:
#[derive(Clone, PartialEq)]
struct Pair
{
a: i32,
b: i32,
}
fn main()
{
let p1 = Pair { a: 1, b: 2 };
let p2 = p1.clone();
let res = p1 == p2;
println!("{}", res);
}
Результат выполнения кода:
true