スコープとシャドーイング

RustRustBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Rust における変数束縛、そのスコープ、およびシャドーイングの概念について学びます。変数束縛は、波括弧で囲まれた文のコレクションであるブロックに限定されます。これらの概念を示すために 2 つの例が用意されています。最初の例は、ブロック内で宣言された変数束縛がそのブロックのスコープに限定され、その外ではアクセスできないことを示しています。2 番目の例は、同じ名前の新しい束縛がブロック内で宣言され、外側の束縛を実質的にシャドーイングする変数シャドーイングを示しています。

注: 実験でファイル名が指定されていない場合、好きなファイル名を使用できます。たとえば、main.rs を使用して、rustc main.rs &&./main でコンパイルして実行できます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") subgraph Lab Skills rust/variable_declarations -.-> lab-99292{{"スコープとシャドーイング"}} rust/string_type -.-> lab-99292{{"スコープとシャドーイング"}} rust/function_syntax -.-> lab-99292{{"スコープとシャドーイング"}} rust/expressions_statements -.-> lab-99292{{"スコープとシャドーイング"}} rust/lifetime_specifiers -.-> lab-99292{{"スコープとシャドーイング"}} end

スコープとシャドーイング

変数束縛にはスコープがあり、それは ブロック 内に存在するように制限されます。ブロックは、波括弧 {} で囲まれた文のコレクションです。

fn main() {
    // この束縛は main 関数内に存在します
    let long_lived_binding = 1;

    // これはブロックであり、main 関数よりも小さなスコープを持っています
    {
        // この束縛はこのブロック内にのみ存在します
        let short_lived_binding = 2;

        println!("inner short: {}", short_lived_binding);
    }
    // ブロックの終わり

    // エラー!`short_lived_binding` はこのスコープ内に存在しません
    println!("outer short: {}", short_lived_binding);
    // FIXME ^ この行をコメントアウトしてください

    println!("outer long: {}", long_lived_binding);
}

また、変数のシャドーイングも許されています。

fn main() {
    let shadowed_binding = 1;

    {
        println!("before being shadowed: {}", shadowed_binding);

        // この束縛は外側の束縛を *シャドーイング* します
        let shadowed_binding = "abc";

        println!("shadowed in inner block: {}", shadowed_binding);
    }
    println!("outside inner block: {}", shadowed_binding);

    // この束縛は前の束縛を *シャドーイング* します
    let shadowed_binding = 2;
    println!("shadowed in outer block: {}", shadowed_binding);
}

まとめ

おめでとうございます!あなたは「スコープとシャドーイング」の実験を完了しました。あなたの技術を向上させるために、LabExでさらに多くの実験を行って練習してください。