Menu
Coddy logo textTech

シャドーイング パート2

CoddyのRustジャーニー「Fundamentals」セクションの一部 — レッスン 48/75。

Rustで変数をシャドーイングすると、新しい変数は元の変数から完全に独立しており、それ自身の可変性の宣言が必要になります。シャドーイングは元の変数の可変性を引き継ぎません。

let mut mut_val = 7;
// 元の変数はミュータブル(可変)です
{ 
    let mut_val = 8;
    // これは外側の mut_val をシャドーイングする新しい変数です
      
    mut_val = 50;
    // エラーが発生しました。なぜなら
    // mut_val がミュータブルではないからです
}
// ここでは問題ありません 
// このスコープでは mut_val は凍結されていません
mut_val = 3;

修正するには、内部スコープに mut を追加します:

{
	let mut mut_val = 8;
	mut_val = 50;
}
challenge icon

チャレンジ

初心者

与えられたコードを修正して、エラーなしで実行できるようにしてください。

チートシート

Rustで変数をシャドーイングする場合、新しい変数は完全に独立しており、独自のミュータビリティ(可変性)宣言が必要です。シャドーイングは元の変数からミュータビリティを継承しません。

let mut mut_val = 7;
// 元の変数は可変です
{ 
    let mut_val = 8;
    // これは外側のmut_valをシャドーイングしますが、不変です
      
    mut_val = 50;
    // エラー: このスコープではmut_valは可変ではありません
}

これを修正するには、シャドーイングする変数にmutを追加します:

{
    let mut mut_val = 8;
    mut_val = 50; // これで動作します
}

自分で試してみよう

fn main() {
    // このコードを修正して動作するようにしてください
    let number = 42;
    {
        let number = number;
        println!("number is {}", number);
        number = 100;  // これはエラーになります
        println!("number is {}", number);
    }
    println!("number is {}", number);
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Fundamentalsのすべてのレッスン