2017-10-19 74 views
0

我有一個Cargo項目由三個文件在同一目錄中組成:main.rsmod1.rsmod2.rs如何使用Cargo/Rust將相同目錄中的文件包含在模塊中?

我想從mod2.rsmod1.rs導入功能,就像我將mod1.rs導入到main.rs的功能一樣。
我讀過關於所需的文件結構,但我沒有得到它 - 命名所有導入的文件mod將導致編輯器中的小混亂,這也只是使項目層次結構複雜化。

有沒有像在Python或C++中一樣導入/包含獨立於目錄結構的文件的方法?

main.rs:

mod mod1; // Works 

fn main() { 
    println!("Hello, world!"); 
    mod1::mod1fn(); 
} 

mod1.rs:

mod mod2; // Fails 

pub fn mod1fn() { 
    println!("1"); 
    mod2::mod2fn(); 
} 

mod2.rs:

pub fn mod2fn() { 
    println!("2"); 
} 

大廈結果:

error: cannot declare a new module at this location 
--> src\mod1.rs:1:5 
    | 
1 | mod mod2; 
    |  ^^^^ 
    | 
note: maybe move this module `src` to its own directory via `src/mod.rs` 
--> src\mod1.rs:1:5 
    | 
1 | mod mod2; 
    |  ^^^^ 
note: ... or maybe `use` the module `mod2` instead of possibly redeclaring it 
--> src\mod1.rs:1:5 
    | 
1 | mod mod2; 
    |  ^^^^ 

我不能use它,因爲它不作爲模塊存在任何地方,我不想修改目錄結構。

回答

2

您所有的頂層模塊聲明應該在main.rs,像這樣:

mod mod1; 
mod mod2; 

fn main() { 
    println!("Hello, world!"); 
    mod1::mod1fn(); 
} 

然後,您可以use mod2mod1

use mod2; 

pub fn mod1fn() { 
    println!("1"); 
    mod2::mod2fn(); 
} 

我建議你閱讀the chapter on modules in the new version of the Rust book,如果你的避風港」已經 - 他們可能會對那些剛接觸這門語言的人感到困惑。

+1

非常感謝!我幾乎確定沒有這種選擇。 – Neo

+0

我讀了那章,但是從中不明白,我可以做你所描述的。 – Neo

+1

@Neo:沒問題!我發現模塊系統一旦有了它的感覺就很有意義,但肯定有一點學習曲線 - [目前正在做一些簡化工作的工作](https://github.com/rust-郎/ RFC文檔/拉/ 2126)。 –

相關問題