問題一覧に戻る
中級トレイト
問題67: Deriveマクロ
#[derive]属性で一般的なトレイトを自動実装できます。Debugは{:?}での表示、Cloneはコピー作成、PartialEqは等価比較を可能にします。ボイラープレートコードを削減し、一貫した実装を保証します。フィールドがトレイトを実装していれば、再帰的に動作します。
// Deriveマクロで自動実装
#[derive(, )]
struct Point {
x: i32,
y: i32,
}
#[derive(Debug, Clone, )]
struct Rectangle {
top_left: Point,
bottom_right: Point,
}
fn main() {
let p1 = Point { x: 0, y: 0 };
let p2 = Point { x: 10, y: 10 };
// Cloneトレイトを使用
let p3 = p1.();
let rect = Rectangle {
top_left: p1,
bottom_right: p2,
};
// Debugトレイトを使用
println!("{:?}", rect);
// PartialEqトレイトを使用
if p3 == Point { x: 0, y: 0 } {
println!("Points are equal!");
}
}