gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:26:50 24 4
gpt4 key购买 nike

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

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

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

为什么我需要在 list.rs 而不是 main.rs使用?我在 list.rs 中使用函数 sorting()print_files() 就像我使用函数 parse()listing()main.rs 中。

ma​​in.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() {

}

排序.rs

pub fn sorting() {

}

display.rs

pub fn print_files() {

}

最佳答案

首先,返回并重新阅读mod and the Filesystem .然后再读。无论出于何种原因,很多人都对模块系统感到困惑。 The Rust Programming Language 中包含大量有用信息.

I suppose that mod will import files into the project and use will use them.

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

使用 bar 可以避免输入 crate 层次结构中某些内容的完整路径。路径 bar 从 crate 的根部开始


当你在 main.rs 中有 mod parser 时,你说的是

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

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

go to the root of the hierarchy, find the module parser, and make it available here (at the crate root) as the name parser.

这已经存在(因为那是定义模块的地方!),所以你会得到一个错误。

当你使用排序list.rs时,你是在说

go to the root of the hierarchy, find the module sort, and make it available here (inside the module list) as the name sort.

这很好用。

1parser/mod.rs

2 因为 main.rs(或 lib.rs)是 crate 根。

另见:

关于rust - 为什么我在子模块中需要 `use` 语句而不是在 main.rs 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52265867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com