Modules
参考资料: https://doc.rust-lang.org/reference/items/modules.html
1 | |
module和类型享有相同的命名空间, 不能出现重名的现象. unsafe关键词在rust很多地方都可以用, 其详细作用留待后续补充.
一个module通常由花括号的内容进行定义, 如:
1 | |
1. Module Source Filenames
上面是一种mod关键词的使用, 另一种是声明一个module, 但是不具备主体. 如:
1 | |
这类module的主体是从文件中加载的. 当mod语句没有path属性时, module文件的路径会根据module的名称进行推理, 见下表, 这样就能组织起module的树形结构了
| Module Path | File Path | Contents |
|---|---|---|
| crate | lib.rs | mod util; |
| crate::util | util.rs | mod config; |
| crate::util::config | util/config.rs |
事实上, module对应的名字也可以是一个文件夹, 只要该文件夹下有mod.rs.
注意, 使用mod语句, 只是将一个module添加到module分支树的当前节点上, 还需要用use语句进行导入~
1 | |
2. The path attribute
有时候, module的名字必须与文件或者文件夹绑定过于死板, 因此可以指定path属性, 单独设置. 这时又存在两种情况:
1 | |
| Source File | c's File Location | c's Module Path |
|---|---|---|
src/a/b.rs | src/a/foo.rs | crate::a::b::c |
src/a/mod.rs | src/a/foo.rs | crate::a::c |
1 | |
| Source File | inner's File Location | inner's Module Path |
|---|---|---|
src/a/b.rs | src/a/b/inline/other.rs | crate::a::b::inline::inner |
src/a/mod.rs | src/a/inline/other.rs | crate::a::inline::inner |
mod-rs指的是根模块(例如lib.rs或者main.rs)和mod.rs(用来将目录作为module)
对于第一种情况, path属性的设置在inline module之外, 指定的文件的相对路径是相对于当前源文件所在目录. 注意源文件是mod-rs还是non-mod-rs其在module tree中的位置不一样~ 可以对比第一个表来判断
对于第二种情况, 也分为mod-rs和non-mod-rs两种情况, 其实本质差不多, 最终归结为module的定义形式
Modules
https://www.torch-fan.site/2022/07/21/modules/