2017-12-27 18 views
2

私はletが不変のバインディングであると考えました。 なぜ正しいコードが動作しますか?錆の不変性バインドを受け入れる

let a = [1, 2, 3, 4, 5]; 
println! ("{:?}", a); 

let (a, b, c) = (1,2,3); 
println! ("{:?}", a); 
println! ("{:?}", b); 
println! ("{:?}", c); 

を(2回aを割り当て)、貨物実行の結果は次のとおりです。

Guess the number! From a 1 - 100 inclusive 
[1, 2, 3, 4, 5] 
1 
2 
3 
+0

[このRustプログラムが不変性を無視する理由](https://stackoverflow.com/questions/42991325/why-does-this-rust-program-ignore-immutability) – trentcl

答えて

0

ashadowedされています。

このような同じブロックでこれを行うには不正な形式です。

+1

私は普遍的だとは言いません悪い; [この回答](https://stackoverflow.com/a/42991597/3650362)では、いくつかの可能な使用方法について説明しています。値が密接に関連していない場合、OPの例のように、それは混乱します。 – trentcl

1

あなたのコードは、多かれ少なかれ、これに相当します。

let first_a = [1, 2, 3, 4, 5]; 
println! ("{:?}", first_a); 

let (second_a, b, c) = (1,2,3); 
println! ("{:?}", second_a); 
println! ("{:?}", b); 
println! ("{:?}", c); 

aは完全に新しい変数です。最初のaは、もう一度作成するとアクセスできなくなります。

関連する問題