• superself

    superself

    在路径上使用 super (父级)和 self(自身)关键字,可以在访问项时消除歧义和防止不必要的路径的硬编码。

    1. fn function() {
    2. println!("called `function()`");
    3. }
    4. mod cool {
    5. pub fn function() {
    6. println!("called `cool::function()`");
    7. }
    8. }
    9. mod my {
    10. fn function() {
    11. println!("called `my::function()`");
    12. }
    13. mod cool {
    14. pub fn function() {
    15. println!("called `my::cool::function()`");
    16. }
    17. }
    18. pub fn indirect_call() {
    19. // 让我们从这个作用域中访问所有名为 `function` 的函数!
    20. print!("called `my::indirect_call()`, that\n> ");
    21. // `self` 关键字表示当前的模块作用域——在这个例子是 `my`。
    22. // 调用 `self::function()` 和直接访问 `function()` 两者都得到相同的结果,
    23. // 因为他们表示相同的函数。
    24. self::function();
    25. function();
    26. // 我们也可以使用 `self` 来访问 `my` 内部的另一个模块:
    27. self::cool::function();
    28. // `super` 关键字表示父级作用域(在 `my` 模块外面)。
    29. super::function();
    30. // 这将在 *crate* 作用域内绑定 `cool::function` 。
    31. // 在这个例子中,crate 作用域是最外面的作用域。
    32. {
    33. use cool::function as root_function;
    34. root_function();
    35. }
    36. }
    37. }
    38. fn main() {
    39. my::indirect_call();
    40. }