第1の解決策は優れています。可能であれば、不変バインディングは常に可変バインディングよりも優れています。そのため、Rustのバインディングはデフォルトでは変更できないため、ほとんどの手続き型言語のような変数を持つために追加のキーワードを入力する必要があります。
あなたが変更可能な変数を使用し、あなたが誤った値に変更することができます:あなたは不変のバージョンを使用する場合、この現象が発生することはできません
fn foo(mut i1: u32) {
i1 = i1.count_ones();
let mut i2 = 0_u32;
// Some lines
i1 = 42; // Oops, I wrote `i1` instead of `i2`
}
を:
fn foo(i1: u32) {
let i1 = i1.count_ones();
let mut i2 = 0_u32;
// Some lines
i1 = 42; // error[E0384]: re-assignment of immutable variable `i1`
}
あなたが唯一の変更可能な変数を使用する必要があります
fn main() {
let mut to_be_modified = 123;
{
// do something in another scope
to_be_modified = 456;
}
// in another function
foo(&mut to_be_modified);
}
fn foo(i: &mut i32) {
*i = 789;
}