2017-12-15 9 views

答えて

6

第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; 
} 
関連する問題