2014-10-15 9 views
44

Seguendo this guide Ho creato un project cargoCome includere il modulo da un altro file dallo stesso progetto?

src/main.rs

fn main() { 
    hello::print_hello(); 
} 

mod hello { 
    pub fn print_hello() { 
     println!("Hello, world!"); 
    } 
} 

che ho eseguito utilizzando

cargo build && cargo run 

e compila senza errori. Ora sto cercando di dividere il modulo principale in due ma non riesco a capire come includere un modulo da un altro file.

mio albero del progetto assomiglia a questo

├── src 
   ├── hello.rs 
   └── main.rs 

e il contenuto dei file:

src/main.rs

use hello; 

fn main() { 
    hello::print_hello(); 
} 

src/hello.rs

mod hello { 
    pub fn print_hello() { 
     println!("Hello, world!"); 
    } 
} 

Quando lo compilo con cargo build Ottengo

modules/src/main.rs:1:5: 1:10 error: unresolved import (maybe you meant `hello::*`?) 
modules/src/main.rs:1 use hello; 
                ^~~~~ 
error: aborting due to previous error 
Could not compile `modules`. 

Ho provato a seguire i suggerimenti del compilatore e main.rs modificati per

#![feature(globs)] 

extern crate hello; 

use hello::*; 

fn main() { 
    hello::print_hello(); 
} 

ma questo ancora non aiuta molto, ora ho questa

modules/src/main.rs:3:1: 3:20 error: can't find crate for `hello` 
modules/src/main.rs:3 extern crate hello; 
               ^~~~~~~~~~~~~~~~~~~ 
error: aborting due to previous error 
Could not compile `modules`. 

C'è un banale esempio di come includere un modulo dal progetto corrente nel file principale del progetto?

Inoltre, eseguo Rust 0.13.0-nightly e carico 0.0.1 -prima notte.

+1

possibile duplicato del [Rust importazioni di base (include)] (http://stackoverflow.com/questions/26224947/rust-basic-imports-includes) – Levans

+0

correlati a http://stackoverflow.com/questions/22596920/split-a-module-across-several-files – Kelvin

risposta

89

Non è necessario il mod hello sul file hello.rs. Codice su qualsiasi file, ma la radice della cassa (main.rs per gli eseguibili, lib.rs per le librerie) viene automaticamente assegnata ai nomi su un modulo.

di includere il codice dal hello.rs sul main.rs, utilizzare mod hello;. Viene esteso al codice che si trova su hello.rs (esattamente come prima). La struttura del file continua lo stesso, e il codice deve essere leggermente modificato:

main.rs:

mod hello; 

fn main() { 
    hello::print_hello(); 
} 

hello.rs:

pub fn print_hello() { 
    println!("Hello, world!"); 
} 
+0

La domanda tardiva non funzionerebbe anche se la specificassi usando ciao invece di mod ciao ?! –

+4

@ChristianSchmitt No, sono cose diverse. 'use' è solo una cosa dello spazio dei nomi, mentre' mod' inserisce il file. Si userebbe 'use', ad esempio, per poter chiamare la funzione' print_hello' senza dover prefisso con lo spazio dei nomi –

+0

Questo mi ha aiutato. +1 e grazie. –

Problemi correlati