Rustのパターンマッチングまわりの小ネタ

struct Sample {
    value: i32,
}

fn main() {
    let sample = Sample { value: 10 };

    println!("{}", sample.value);
}

この出力は当然 10 になりますね。

それではこの場合はどうなるでしょうか?

struct Sample {
    value: i32,
}

fn main() {
    let sample = Sample { value: 10 };

    let Sample { value } = sample;

    println!("{}", value);
}

パターンマッチングでvalueに10が入るので出力は10になります。

そして最近驚いたのですが、次のような場合にも出力が10になるんですね。

struct Sample {
    value: i32,
}

fn main() {
    let sample = Sample { value: 10 };

    let Sample { value: new_value } = sample;

    println!("{}", new_value);
}