첫 번째 솔루션은 더 좋다. 가능하면 변경 불가능한 바인딩이 항상 변경 가능한 바인딩보다 낫습니다. 그래서 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;
}