rust - 为什么只有 main.rs 可以声明 mod?
问题描述
main.rs
main2.rs
file1.rs
src/something.rs
Cargo.toml
on main.rs
,做的mod file1
工作,但mod file1
做main2.rs
导致
file not found for module `file1`
为什么只能main.rs
用 声明兄弟文件mod
?
解决方案
可以从main.rs
和声明新模块lib.rs
。第一个用于二进制 crate,后者用于库。需要注意的是,如果一个包同时包含两个文件,那么它将有两个同名的 crate(一个库和一个二进制文件)。你也可以有多个二进制包,如果你定义了crate roots
(下面解释)src/bin
- 每个文件都将被视为一个单独的二进制包。这在rust book中有详细解释。
这两个文件很特别——它们被称为crate root,因为它们形成了一个树状结构。每个模块都应该是它的一部分。您不能在该树之外定义模块。书中再次对此进行了解释。
因此,为了能够从内部定义一个新模块main2.rs
,它要么必须是 a crate root
- 即它必须具有 amain()
并且位于其中,/src/bin/main2.rs
要么它必须是模块树的一部分,从一些 crate 根下降.
推荐阅读
- react-native - react-native 中的图像预览
- python - Python套接字不会阻止垃圾邮件
- protocol-buffers - 如何在 C++ 中使用 grpc 在 proto 文件中生成服务?
- javascript - 从 php url 获取可下载二进制文件的文件名而不实际下载文件
- dart - 颤振中的“nameof”运算符
- scala - 从 application.conf 中检索对象列表
- javascript - 如何根据角度的两个数组制作活动项目?
- algorithm - 具有最少 3 个连续相同字符的二进制子串的数量
- html - 显示:flex 不在铬和移动设备中调整高度
- javascript - 我试图让每个按钮增加他自己 div 中输入的数字,但不起作用