为什么我需要在子模块中而不是在main.rs中使用`use`语句?

时间:2018-09-10 21:40:29

标签: rust

我不理解moduse;我想mod会将文件导入项目,而use将使用它们。

我有一个具有以下层次结构的项目:

.  
|-- Cargo.lock  
|-- Cargo.toml  
|-- src  
|  |-- display.rs  
|  |-- list.rs  
|  |-- main.rs  
|  |-- parser.rs  
|  |-- sort.rs  

为什么在 list.rs 中需要use而不在 main.rs 中需要sorting()?我在 list.rs 中使用功能print_files()parse() main.rs <中使用功能listing()mod parser; // Ok mod list; // Ok mod sort; // Ok mod display; // Ok // use parser;// The name `parser` is defined multiple times fn main() { parser::parse(); list::listing(); } / em>。

main.rs

//mod sort;    // file not found in module `sort`
//mod display; // file not found in module `display`
use sort;      // Ok
use display;   // Ok

pub fn listing() {
    parcours_elements();
    sort::sorting();
    display::print_files();
}

fn parcours_elements() {

}

list.rs

pub fn sorting() {

}

sort.rs

pub fn print_files() {

}

display.rs

{{1}}

1 个答案:

答案 0 :(得分:2)

首先,请重新阅读mod and the Filesystem。然后再次阅读。无论出于何种原因,许多人都无法使用模块系统。 The Rust Programming Language中包含大量的良好信息。

  

我想mod会将文件导入项目,而use将使用它们。

mod foo相对于当前模块将某些代码“附加”到板条箱层次结构。

use bar避免了键入板条箱层次结构中某些内容的完整路径。路径bar从板条箱的根开始


main.rs 中有mod parser时,您的意思是

  

找到文件 parser.rs 1 并将所有代码放在相对于板条根 2 的层次结构中。

当您尝试在 main.rs 中添加use parser时,是在说

  

转到层次结构的根,找到模块parser,并在此处(板条箱根)以名称parser可用。

这已经存在(因为定义模块的地方就在这里!),所以会出现错误。

当您有use sort list.rs 时,您是在说

  

转到层次结构的根,找到模块sort,并在此处(模块list内部)以名称sort可用。

这很好。

1 parser / mod.rs

2 因为 main.rs (或 lib.rs )是板条箱根。

另请参阅: