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/