我不明白mod
或use
;我想mod
会将文件导入到项目中,use
会使用它们。
我有一个具有此层次结构的项目:
.
|-- Cargo.lock
|-- Cargo.toml
|-- src
| |-- display.rs
| |-- list.rs
| |-- main.rs
| |-- parser.rs
| |-- sort.rs
为什么我需要list.rsuse
而不是main.rs?我在list.rs中使用函数sorting()
和print_files()
,就像我在 main.rs 中使用函数parse()
和listing()
一样。
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() {
}
display.rs
pub fn print_files() {
}
首先,返回并重新阅读mod
和文件系统。然后再读一遍。无论出于何种原因,许多人都对模块系统有疑问。Rust 编程语言中包含大量好的信息。
我想
mod
会将文件导入到项目中,use
会使用它们。
mod foo
相对于当前模块将一些代码"附加"到 crate 层次结构中。
use bar
避免了在板条箱层次结构中键入某些内容的完整路径。路径bar
从板条箱的根部开始。
当你mod parser
main.rs时,你说的是
找到1parser.rs的文件,并将该文件中的所有代码放在相对于 crate根 2的层次结构中。
当您尝试在main.rs中添加use parser
时,您是在说
转到层次结构的根目录,找到模块
parser
,并在此处(在 crate 根目录(将其作为名称parser
提供。
这已经存在(因为那是定义模块的地方!(,所以你会得到一个错误。
当你有use sort
是list.rs时,你是在说
转到层次结构的根目录,找到模块
sort
,并在此处(模块list
内(将其作为名称sort
提供。
这工作正常。
1 或解析器/mod.rs。
2 因为main.rs(或lib.rs(是板条箱的根。
另请参阅:
- 为什么 Rust 中有一个 mod 关键字?
- 将模块拆分为多个文件
- 如何包含来自同一项目的另一个文件的模块?