Super と Self

RustRustBeginner
今すぐ練習

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

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

はじめに

この実験では、Rust におけるsuperselfキーワードの使い方を調べます。これらのキーワードは、アイテムにアクセスする際の曖昧さを解消し、ハードコードされたパスを避けるために使用されます。

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust/DataTypesGroup -.-> rust/type_casting("Type Conversion and Casting") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") subgraph Lab Skills rust/type_casting -.-> lab-99335{{"Super と Self"}} rust/function_syntax -.-> lab-99335{{"Super と Self"}} rust/expressions_statements -.-> lab-99335{{"Super と Self"}} rust/lifetime_specifiers -.-> lab-99335{{"Super と Self"}} rust/method_syntax -.-> lab-99335{{"Super と Self"}} end

superself

superself キーワードは、アイテムにアクセスする際の曖昧さを解消し、不必要なハードコーディングを防ぐためにパスに使用できます。

fn function() {
    println!("called `function()`");
}

mod cool {
    pub fn function() {
        println!("called `cool::function()`");
    }
}

mod my {
    fn function() {
        println!("called `my::function()`");
    }

    mod cool {
        pub fn function() {
            println!("called `my::cool::function()`");
        }
    }

    pub fn indirect_call() {
        // このスコープから `function` という名前のすべての関数にアクセスしましょう!
        print!("called `my::indirect_call()`, that\n> ");

        // `self` キーワードは、現在のモジュールスコープ(この場合は `my`)を指します。
        // `self::function()` を呼び出して、直接 `function()` を呼び出しても同じ結果になります。
        // なぜなら、同じ関数を参照しているからです。
        self::function();
        function();

        // `self` を使って `my` 内の別のモジュールにアクセスすることもできます。
        self::cool::function();

        // `super` キーワードは、親スコープ(`my` モジュールの外)を指します。
        super::function();

        // これは、クレートスコープ内の `cool::function` にバインドされます。
        // この場合、クレートスコープは最も外側のスコープです。
        {
            use crate::cool::function as root_function;
            root_function();
        }
    }
}

fn main() {
    my::indirect_call();
}

まとめ

おめでとうございます!あなたは「Super」と「Self」の実験を完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を行って練習することができます。