Namaran

Code daily. Without assist.

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");
    }
}

abは同じxyを持つのに、これはコンパイルできません。原因を特定し、最小限の変更で直してください。

Answer

原因はPoint==で比較できる型になっていないことです。let b = a;のような代入(値のコピーや所有権の移動)はどんな構造体にも自動的にできますが、「等しいとは何か」を定義するPartialEqはRustが勝手には実装してくれません。修正はstruct Pointの直前に#[derive(PartialEq)]を1行足すだけです。フィールドのi32はすでにPartialEqを実装しているので、これでxyがそれぞれ等しいかどうかを比較する==が使えるようになります。