2017-09-19 4 views
1

可変変数はキーワードmutで宣言して初期化しますが、次のコード行で使用する場合はキーワードmutを繰り返す必要があります。2回目に `mut 'の書き方を繰り返す必要があるのはなぜですか?

私は、いったん変数が宣言され、変数として初期化されると、そのままであることが予想されます。これは構文的な砂糖ですか、これには特別な理由がありますか?

私は上記のコードは次のようであることを期待するだろう:私はread_lineへの呼び出しでmutキーワードを省略している

let mut guess = String::new(); 

io::stdin() 
    .read_line(&guess) 
    .expect("Failed to read line"); 

注意。

答えて

5

The Rust Programming Language, second edition、特にreferences and borrowingのセクションを読み返すことを強くお勧めします。

参照には2つのタイプがあります:不変および可変です。たとえ変数に変異したとしても、不変な参照を取得することができます。この選択は、&fooまたは&mut fooと言ってください。

この機能を使用すると、rules of referencesに接着させることが重要である:

  • 1つの不定参照:任意の時点で

    1. 、あなたはどちらかではなく、両方のことができます。
    2. 任意の数の不変参照。 BufRead::read_lineとして

Stringへの変更可能な参照を必要とし、あなたが&mut guessを言う必要があります。

+1

引用したテキストを展開するには、 '&x'を書くことは' x 'への複数の参照を同時に作ることができるので不変な 'x'に非常に便利です。 'x 'が変更可能なときに'&x'が自動的に '&mut x'を意味するならば、単一のスコープ内で' x'への参照を複数作成することはできません。 – user4815162342

関連する問題