Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

superself

super キーワードと self キーワードは、アイテムにアクセスするときの曖昧さを取り除き、パスの不要なハードコーディングを防ぐために、パス内で使用できます。

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();

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

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

        // これは *crate* スコープ内の `cool::function` に束縛されます。
        // この場合、crate スコープは最も外側のスコープです。
        {
            use crate::cool::function as root_function;
            root_function();
        }
    }
}

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