2026-09-12
point_eq.rs
struct Point {
x: i32,
y: i32,
}
fn main() {
let a = Point { x: 1, y: 2 };
let b = Point { x: 1, y: 2 };
if a == b {
println!("equal");
} else {
println!("different");
}
}
aとbは同じx・yを持つのに、これはコンパイルできません。原因を特定し、最小限の変更で直してください。
Answer
原因はPointが==で比較できる型になっていないことです。let b = a;のような代入(値のコピーや所有権の移動)はどんな構造体にも自動的にできますが、「等しいとは何か」を定義するPartialEqはRustが勝手には実装してくれません。修正はstruct Pointの直前に#[derive(PartialEq)]を1行足すだけです。フィールドのi32はすでにPartialEqを実装しているので、これでxとyがそれぞれ等しいかどうかを比較する==が使えるようになります。