2014-10-22 19 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),在模塊系統和文件路徑都是相對較高的級別,所以如果我說的話可能已經錯誤了讀這個。