如何从同一个项目的另一个文件中包含模块?

按照这个指南,我创build了一个货物项目

SRC / main.rs

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

我运行使用

 cargo build && cargo run 

它编译没有错误。 现在我试图将主模块分成两部分,但不知道如何从另一个文件中包含模块。

我的项目树看起来像这样

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

和文件的内容:

SRC / main.rs

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

SRC / hello.rs

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

当我用cargo build编译的时候,我得到了

 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`. 

我试图按照编译器的build议和修改main.rs来

 #![feature(globs)] extern crate hello; use hello::*; fn main() { hello::print_hello(); } 

但这仍然没有什么帮助,现在我明白了

 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`. 

有没有一个简单的例子来说明如何从当前项目中包含一个模块到项目的主文件?

另外,我每天晚上运行Rust 0.13.0和货运0.0.1。

您的hello.rs文件中不需要mod hello 。 在任何文件上的代码,但是根目录(可执行文件的main.rs ,库的main.rs )在模块上自动命名空间。

为了在你的main.rs包含hello.rs的代码,使用mod hello; 。 它被扩展到hello.rs的代码(完全和以前一样)。 你的文件结构继续相同,你的代码需要稍微改变:

main.rs:

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

hello.rs:

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