如果我在Cargo包的.rs
目录中有多个src
文件,那么可见性,导入等规则是什么?
目前,忽略任何额外的(即不是明确标识为Cargo.toml中可执行文件源的文件)文件。
我需要做些什么来解决这个问题?
答案 0 :(得分:12)
以这种方式完全没有关于货物的特别之处。这是完全正常的Rust模块系统。如果Cargo将编译src/lib.rs
,那或多或少等同于执行rustc --crate-type lib src/lib.rs
(实际上有更多的命令行参数,但这是它的基础)。
其他文件随后与mod
,use
等一起使用。文件不会自动导入或类似的东西。这部分尚未明确记录;一些简要说明如何实现事物的事情是http://rustbyexample.com/mod/split.html和http://doc.rust-lang.org/reference.html#modules,但任何非平凡的代码库都会使用它们,因此您可以选择任何代码库来查看示例。
答案 1 :(得分:3)
很难说你从共享的信息中得到了什么。以下是三个看似微不足道的事情,我仍然需要参考文档来弄清楚:
首先,
mod foo;
看起来像一个声明,但没有参数它实际上就像一个包含。因此,您使用相同的关键字来声明和包含模块,即没有使用:: keyword。
其次,模块本身可以是公共的或私有的。如果你没有在有问题的函数和包含模块上添加pub关键字,那可能会让你失望。
pub mod foo {pub fn bar();}
第三,似乎在每个文件的顶部添加了一个隐式模块。这令人困惑;参考手册讨论了文件路径和名称之间的严格分离,以及代码中的模块路径,但这种抽象似乎在这里泄漏。
注意,在编写本文时,Rust仍然是1.0之前(0.12),在模块系统和文件路径是相对较高的级别,所以如果我说的话在你阅读的时候可能已经错了,不要感到惊讶此