为什么我在子模块中需要“use”语句,但在 main.rs 中不需要?

2024-05-25

我不明白mod or use;我想mod将文件导入到项目中并use会使用它们。

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

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

为什么我需要use in list.rs并且不在main.rs?我使用该功能sorting() and print_files() in list.rs就像我使用这个功能一样parse() and listing() in main.rs.

main.rs

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

list.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() {

}

sort.rs

pub fn sorting() {

}

显示.rs

pub fn print_files() {

}

首先,返回并重新阅读mod和文件系统 https://doc.rust-lang.org/book/second-edition/ch07-01-mod-and-the-filesystem.html。然后阅读它again。无论出于何种原因,许多人都对模块系统遇到了麻烦。大量的好信息包含在Rust 编程语言 https://doc.rust-lang.org/book/second-edition/.

我想mod将文件导入到项目中并use会使用它们。

mod foo相对于当前模块,将一些代码“附加”到 crate 层次结构中。

use bar避免需要输入 crate 层次结构中某些内容的完整路径。路径bar starts 从板条箱的根部开始.


当你有mod parser in main.rs, 你是说

go find the file parser.rs1 and put all the code in that file in the hierarchy relative to the crate root2.

当您尝试添加时use parser in main.rs, 你是说

转到层次结构的根,找到模块parser,并使其在此处(位于板条箱根部)作为名称可用parser.

它已经存在(因为这是定义模块的地方!),因此您会收到错误。

当你有use sort is list.rs, 你是说

转到层次结构的根,找到模块sort,并使其在此处可用(在模块内list)作为名称sort.

这很好用。

1 Or parser/mod.rs.

2 Because main.rs (or lib.rs) are the crate roots.

也可以看看:

  • Rust 中为什么有 mod 关键字? https://stackoverflow.com/q/32814653/155423
  • 将模块拆分为多个文件 https://stackoverflow.com/q/22596920/155423
  • 如何包含同一项目中另一个文件的模块? https://stackoverflow.com/q/26388861/155423
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我在子模块中需要“use”语句,但在 main.rs 中不需要? 的相关文章

随机推荐