对Rust中模块结构理解的困惑

wsxa1bj1  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(144)

我在理解Rust中的模块结构时遇到了一些困惑。正如这里提到的 rust 书
在crate根文件中,可以声明新的模块;
因此,正如rust告诉我们的,crate根是src/main.rssrc/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
wz3gfoph

wz3gfoph1#

在上面提到的链接中,这本书的作者在www.example.com文件中创建了一个名为garden的模块garden.rs,这个模块不是crate root,怎么回事???
我想让你困惑的是“在文件中”是什么意思。
要理解Rust模块系统的关键是,一个模块总是在某个Rust源代码中声明(无论是crate根还是模块),而不是模块内容的源代码。具体来说:
1.模块garden是在crate根文件(如src/lib.rs)中由mod garden; * 声明的。这意味着该模块是crate根目录中的一个项目。
1.编译器将此作为查找src/garden.rssrc/garden/mod.rs的指令。
1.编译器在该文件中找到的任何源代码都将成为称为crate::garden的模块的内容。
一般来说,模块总是由 * 它们的父级 * 声明,而不是它们自己。
这是否意味着声明一个子模块,我们需要在src文件夹中创建一个文件夹,并在该文件夹中为子模块创建文件?
这里的“子模块”,作者只是指“在另一个模块中的模块,而不是在crate根中的模块”。鉴于:是的,子模块放在src内部的文件夹中。
在示例中,becausevegetablesgarden的子模块(意味着它是在garden.rs中声明的),

  • 其模块路径为crate::garden::vegetables,且
  • 其源代码位于src/garden/vegetables.rs

相关问题