如果我在一个 Cargo 包.rs
的目录中有多个文件src
,那么可见性、导入等规则是什么?
目前,任何额外的(即不是在 Cargo.toml 中明确标识为可执行文件的源的文件)文件都将被忽略。
我需要做什么来解决这个问题?
如果我在一个 Cargo 包.rs
的目录中有多个文件src
,那么可见性、导入等规则是什么?
目前,任何额外的(即不是在 Cargo.toml 中明确标识为可执行文件的源的文件)文件都将被忽略。
我需要做什么来解决这个问题?
以这种方式,Cargo 并没有什么特别之处。这都是完全正常的 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有几件事简要说明了如何实现,但任何非平凡的代码base 将使用它们,因此您可以选择几乎任何代码库来查看示例。
很难从你分享的信息中说出你被什么绊倒了。以下是三个看似微不足道的事情,我仍然必须参考文档才能弄清楚:
首先,
mod foo;
看起来像一个声明,但它没有参数它实际上类似于一个包含。因此,您在声明和包含模块时使用相同的关键字,即没有 using:: 关键字。
其次,模块本身可以是公共的或私有的。如果您没有在相关函数和包含模块上都添加 pub 关键字,那可能会绊倒您。
pub mod foo {pub fn bar();}
第三,似乎在每个文件的顶部都添加了一个隐式模块。这令人困惑;参考手册讨论了文件路径和名称之间的严格分离,以及代码中的模块路径,但这种抽象在这里似乎有漏洞。
请注意,在撰写本文时,Rust 仍然是 pre-1.0 (0.12),在模块系统和文件路径方面相对较高,所以如果您阅读本文时我所说的可能已经错了,请不要感到惊讶。
文件隐含在您的 rust 代码中。
例如,如果您的 a or部分中src/foo.rs
指向的文件包含:path
[lib]
[[bin]]
Cargo.toml
mod bar;
它也告诉cargo
构建src/bar.rs
,并包含它。