super 和 self - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## 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

# `super` 和 `self`

`super` 和 `self` 关键字可以在路径中使用，以消除访问项目时的歧义，并避免不必要的路径硬编码。

    fn function() {
        println!("调用了 `function()`");
    }

    mod cool {
        pub fn function() {
            println!("调用了 `cool::function()`");
        }
    }

    mod my {
        fn function() {
            println!("调用了 `my::function()`");
        }

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

        pub fn indirect_call() {
            // 让我们从这个作用域访问所有名为 `function` 的函数！
            print!("调用了 `my::indirect_call()`，它\n> ");

            // `self` 关键字指的是当前模块作用域 - 在这里是 `my`。
            // 调用 `self::function()` 和直接调用 `function()` 都会
            // 得到相同的结果，因为它们指向同一个函数。
            self::function();
            function();

            // 我们也可以使用 `self` 来访问 `my` 内的另一个模块：
            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();
    }