2017-05-19 28 views
1

我目前在學Rust。我剛剛掌握了借用系統,但我不知道模塊系統是如何工作的。Rust中的導入/模塊系統如何工作?

要導入一個外部模塊,我必須寫入extern crate sdl2;。但是如果我想導入一個非外部箱子呢?

我知道我可以定義使用mod比如模塊:

mod foo { 
    fn bar(length: i32) -> Vec<i32> { 
     let mut list = vec![]; 
     for i in 0..length + 1 { 
      if list.len() > 1 { 
       list.push(&list[-1] + &list[-2]); 
      } else { 
       list.push(1); 
      } 
     } 
     list 
    } 
} 

而且與foo::同一文件中使用它,但我怎麼可以使用函數/模塊從其他文件?

只是爲了詳情緣故想象這樣設置:

. 
|-- Cargo.lock 
|-- Cargo.toml 
`-- src 
    |-- foo.rs 
    `-- main.rs 

所以在的src/foo.rs我:

fn bar(length: i32) -> Vec<i32> { 
    let mut list = vec![]; 
    for i in 0..length + 1 { 
     if list.len() > 1 { 
      list.push(&list[-1] + &list[-2]); 
     } else { 
      list.push(1); 
     } 
    } 
    list 
} 

而且我想在src/main.rs使用它。當我嘗試一個普通use foo::bar,我得到:

| 
1 | use foo::bar; 
    |  ^^^^^^^^ Maybe a missing `extern crate foo;`? 

時,把裏面mod foo {...}功能我得到同樣的錯誤。

如果有任何關於此主題的文章,請給我一個鏈接,因爲我什麼也沒有得到Rust書。

+1

如何查看[* Rust編程語言*,第二版](https://doc.rust-lang.org/beta/book/second-edition/)?你還沒有告訴我們你從書中不能理解的內容,那麼是什麼阻止了你給予你已經不明白的相同內容的答案呢? – Shepmaster

+0

此外,本書的第一版有關於[多個文件箱]的部分(https://doc.rust-lang.org/beta/book/first-edition/crates-and-modules.html#multiple-file - 討論你的確切情況。 – Shepmaster

+0

*非外部箱子* - 沒有這樣的東西存在。 – Shepmaster

回答

-1

此聲明添加到您的main.rs文件:

mod foo; 

作用就像一個速記:

mod foo { include!("foo.rs") } 

雖然它知道,如果沒有一個foo.rs文件,但有一個代替foo/mod.rs文件。