2014-10-22 20 views
13

如果我在Cargo包的src目录中有多个.rs文件,那么有关可见性,导入等的规则是什么?货物的多个锈源文件

当前,任何多余的文件(即不是明确标识为Cargo.toml中可执行文件的源文件)都将被忽略。

我需要做些什么来解决这个问题?

回答

10

货物没有什么特别的,就这样。这是完全正常的Rust模块系统。如果Cargo将编译src/lib.rs,这或多或少相当于执行了rustc --crate-type lib src/lib.rs(在实践中有更多的命令行参数,但这是它的基础)。

然后使用其他文件与mod,use等等。文件不会自动导入或类似的东西。这部分还没有很清楚地记录;一些简要介绍如何实现的东西是http://rustbyexample.com/mod/split.htmlhttp://doc.rust-lang.org/reference.html#modules,但是任何非平凡的代码库都会使用它们,因此您可以选择几乎任何代码库来查看示例。

+0

多么尴尬:我的箱子指南被合并了,但我忘了更改makefile以将其构建在:https://github.com/rust-lang/rust/pull/17555/files – 2014-10-23 07:02:30

2

很难说你从你共享的信息中被绊倒了。这里有三个看似琐碎的事情,我仍然需要参考documentaton弄清楚:

首先,

mod foo; 

看起来像一个声明,但它不带参数,它实际上是一样的东西包括: 。所以你使用相同的关键字来声明和包含模块,即没有使用::关键字。

其次,模块本身可以是公共或私人的。如果您没有在有问题的函数和包含模块上添加pub关键字,那可能会让您失望。

pub mod foo {pub fn bar();} 

第三,似乎有一个隐含模块添加在每个文件的顶部。这很混乱;参考手册讨论了文件路径和名称与代码中的模块路径之间的严格分离,但是这里的抽象似乎是漏洞。

请注意,Rust在编写本文时仍处于1.0之前(0.12),在模块系统和文件路径都是相对较高的级别,所以如果我说的话可能已经错误了读这个。