use关键字中的有效路径根是什么?

时间:2019-01-21 11:31:33

标签: module rust rust-2018

随着模块系统为2018版进行的更新,use关键字的功能已更改。在use关键字之后可以使用哪些有效路径?

2 个答案:

答案 0 :(得分:4)

use语句中的路径只能以以下方式启动:

  • 外部木箱的名称:然后指的是外部木箱
  • crate:指的是您自己的板条箱(顶层)
  • self:引用当前模块
  • super:引用父模块
  • 其他名称:在这种情况下,它将查找与当前模块相对的名称​​相对

一个示例,演示了各种use-路径(Playground):

pub const NAME: &str = "peter";
pub const WEIGHT: f32 = 3.1;

mod inner {
    mod child {
        pub const HEIGHT: f32 = 0.3;
        pub const AGE: u32 = 3;
    }

    // Different kinds of uses
    use base64::encode;   // Extern crate `base64`
    use crate::NAME;      // Own crate (top level module)
    use self::child::AGE; // Current module
    use super::WEIGHT;    // Parent module (in this case, this is the same 
                          // as `crate`)
    use child::HEIGHT;    // If the first name is not `crate`, `self` or 
                          // `super` and it's not the name of an extern 
                          // crate, it is a path relative to the current
                          // module (as if it started with `self`)
}

use语句行为随Rust 2018(在Rust≥1.31中可用)更改。阅读this guide,了解有关使用声明及其在Rust 2018中的更改的更多信息。

答案 1 :(得分:2)

您的道路可以以两种不同的方式开始:绝对或相对:

  • 您的路径可以以板条箱名称开头,也可以使用crate关键字来命名当前板条箱:

    struct Foo;
    
    mod module {
        use crate::Foo; // Use `Foo` from the current crate.
        use serde::Serialize; // Use `Serialize` from the serde crate.
    }
    
    fn main() {}
    
  • 否则,根隐式地为self,这意味着您的路径将相对于当前模块:

    mod module {
        pub struct Foo;
        pub struct Bar;
    }
    
    use module::Foo; // By default, you are in the `self` (current) module.
    use self::module::Bar; // Explicit `self`.
    

    在这种情况下,您可以使用super来访问外部模块:

    struct Foo;
    
    mod module {
        use super::Foo; // Access `Foo` from the outer module.
    }