2017-05-19 5 views
1

Ich lerne gerade Rust. Ich habe gerade das Ausleihsystem gemeistert, aber ich weiß nicht, wie das Modulsystem funktioniert.Wie funktioniert das Import-/Modulsystem in Rust?

Um ein externes Modul zu importieren, muss ich extern crate sdl2; schreiben. Aber was, wenn ich eine nicht externe Kiste importieren möchte?

Ich weiß, dass ich ein Modul definieren kann mit mod wie:

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 
    } 
} 

Und es in der gleichen Datei verwenden, um mit foo::, aber wie kann ich Funktionen/Module aus anderen Dateien?

Nur aus Gründen der Details vorstellen, dieses Setup:

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

So in src/foo.rs ich habe:

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 
} 

Und ich will es in src/main.rs verwenden. Wenn ich eine Ebene use foo::bar versuchen, erhalte ich:

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

Wenn die Funktion innerhalb mod foo {...} Putting ich den gleichen Fehler.

Wenn es einen Beitrag zu diesem Thema gibt, geben Sie mir einen Link dazu, da ich nichts als das Rust Book bekomme.

+1

Wie wäre es mit dem Auschecken [* The Rust Programmiersprache *, zweite Ausgabe] (https://doc.rust-lang.org/beta/book/second-edition/)? Sie haben uns nicht gesagt, was Sie aus dem Buch nicht verstehen. Was hindert Sie daran, Ihnen denselben Inhalt zu geben, den Sie nicht verstehen? – Shepmaster

+0

Außerdem enthält die erste Ausgabe des Buches einen Abschnitt über [mehrere Dateikisten] (https://doc.rust-lang.org/beta/book/first-edition/crates-and-modules.html#multiple-file (Kisten), die deine genauen Umstände besprechen. – Shepmaster

+0

* eine nicht externe Kiste * - so etwas gibt es nicht. – Shepmaster

Antwort

-1

Fügen Sie diese Erklärung Ihre main.rs Datei:

mod foo; 

, die wie eine Kurzschrift wirkt für:

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

Obwohl es, dass weiß, ob es nicht eine foo.rs Datei ist, aber es ist ein foo/mod.rs Datei, um das stattdessen aufzunehmen.