てがみ: qatacri at protonmail.com | 統計 | 2023

202334102

Rust の borrow checker / type checker の挙動を理解していないことを理解した。

let mut x = 0;
let ref_x_0 = &mut x;
let ref_x_1 = &mut x; // compile error.

これは二つ目の参照を取ろうとした時点でコンパイルエラー。

let mut x = 0;
let ref_x = &mut x;
let ref_ref_x = &x;
**ref_ref_x = 1; // compile error.

これは dereference しようとしたところでコンパイルエラー。 C++ と違って **(&&mut x) がエラーになるべきなのは分かるが、型として &&mut T&&T になるわけではないのだよな。