我在理解Rust中的模块结构时遇到了一些困惑。正如这里提到的 rust 书
在crate根文件中,可以声明新的模块;
因此,正如rust告诉我们的,crate根是src/main.rs
和src/lib.rs
。
1.在上面提到的链接中,这本书的作者在garden.rs
文件中创建了一个名为garden
的模块,这个模块不是crate root,怎么回事???
1.对于声明子模块,Rust书籍告诉我们:
在crate根目录以外的任何文件中,都可以声明子模块。
这是否意味着要声明一个子模块,我们需要在src
文件夹中创建一个文件夹,并在该文件夹中为子模块创建文件?如下所述:
backyard
├── Cargo.lock
├── Cargo.toml
└── src
├── garden
│ └── vegetables.rs
├── garden.rs
└── main.rs
1条答案
按热度按时间wz3gfoph1#
在上面提到的链接中,这本书的作者在www.example.com文件中创建了一个名为garden的模块garden.rs,这个模块不是crate root,怎么回事???
我想让你困惑的是“在文件中”是什么意思。
要理解Rust模块系统的关键是,一个模块总是在某个Rust源代码中声明(无论是crate根还是模块),而不是模块内容的源代码。具体来说:
1.模块
garden
是在crate根文件(如src/lib.rs
)中由mod garden;
* 声明的。这意味着该模块是crate根目录中的一个项目。1.编译器将此作为查找
src/garden.rs
或src/garden/mod.rs
的指令。1.编译器在该文件中找到的任何源代码都将成为称为
crate::garden
的模块的内容。一般来说,模块总是由 * 它们的父级 * 声明,而不是它们自己。
这是否意味着声明一个子模块,我们需要在src文件夹中创建一个文件夹,并在该文件夹中为子模块创建文件?
这里的“子模块”,作者只是指“在另一个模块中的模块,而不是在crate根中的模块”。鉴于:是的,子模块放在
src
内部的文件夹中。在示例中,because
vegetables
是garden
的子模块(意味着它是在garden.rs
中声明的),crate::garden::vegetables
,且src/garden/vegetables.rs
。