2017-12-15 25 views

답변

6

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