削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎定数: 2種類の定数
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
同名変数への再 let は、元の値への参照手段を失う。
タグ: 2017年版ソースエディター
166 行
 
==== シャドーイング ====
一度mutなしで宣言した変数でも、再度letを使って宣言しなおすことは可能でありこのため実質的に再代入のようなもの初期化がもう一度できます。
このことを、シャドーイングと言います。また、「新しい宣言によって、前の宣言が覆い隠された (shadowed) 」のように言います。
シャドーイングにより、それまで変数に束縛されていた値への参照がなくなります。
 
<syntaxhighlight lang=rust highlight='2,4' line>
181 ⟶ 182行目:
Hello, rust!
</syntaxhighlight>
 
ただし、mutなしで新しく宣言された変数は最代入が禁止なので、下記のように新たにletなしで代入をするとエラーになります。
 
<syntaxhighlight lang=rust highlight='2,4' line>
fn main() {
let hello : &str = "Hello, world!";
println!("{}", hello);
let hello = "Hello, rust!";
println!("{}", hello);
let hello = "Hello, error!";
println!("{}", hello);
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
error[E0384]: cannot assign twice to immutable variable `hello`
--> sample.rs:7:5
|
4 | let hello = "Hello, rust!";
| -----
| |
| first assignment to `hello`
| help: consider making this binding mutable: `mut hello`
...
7 | hello = "Hello, mistake!";
| ^^^^^^^^^^^^^^^^^^^^^^^^^ cannot assign twice to immutable variable
 
error: aborting due to previous error
 
For more information about this error, try `rustc --explain E0384`.
 
</syntaxhighlight>
 
要するに、letによる宣言は、単に既存の同名の変数宣言を上書きできるというだけの事です。上書きしたところで、「宣言時のmutなしでは再代入できない」というルールは決して変わっていないので、再代入した内容をコンパイルしようとするとエラーになるという仕組みです。
 
==== 定数 ====