按照这个指南,我创建了一个Cargo项目。
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!");
}
}
当我编译它与货物构建我得到
error[E0432]: unresolved import `hello`
--> src/main.rs:1:5
|
1 | use hello;
| ^^^^^ no `hello` external crate
我试着按照编译器的建议修改main。rs:
#![feature(globs)]
extern crate hello;
use hello::*;
fn main() {
hello::print_hello();
}
但这仍然没有多大帮助,现在我得到了这个:
error[E0463]: can't find crate for `hello`
--> src/main.rs:3:1
|
3 | extern crate hello;
| ^^^^^^^^^^^^^^^^^^^ can't find crate
是否有一个简单的例子说明如何将当前项目中的一个模块包含到项目的主文件中?
如果你希望有嵌套模块…
2018年生锈
它不再需要文件mod.rs(尽管它仍然被支持)。惯用的替代方法是将文件命名为模块的名称:
$ tree src
src
├── main.rs
├── my
│ ├── inaccessible.rs
│ └── nested.rs
└── my.rs
main.rs
mod my;
fn main() {
my::function();
}
my.rs
pub mod nested; // if you need to include other modules
pub fn function() {
println!("called `my::function()`");
}
2015年生锈
您需要将一个mod.rs文件放在与模块同名的文件夹中。Rust by Example解释得更好。
$ tree src
src
├── main.rs
└── my
├── inaccessible.rs
├── mod.rs
└── nested.rs
main.rs
mod my;
fn main() {
my::function();
}
mod.rs
pub mod nested; // if you need to include other modules
pub fn function() {
println!("called `my::function()`");
}
我真的很喜欢加德纳的回答。我一直在模块声明中使用这个建议。
./src
├── main.rs
├── other_utils
│ └── other_thing.rs
└── utils
└── thing.rs
文件main.rs
#[path = "utils/thing.rs"] mod thing;
#[path = "other_utils/other_thing.rs"] mod other_thing;
fn main() {
thing::foo();
other_thing::bar();
}
文件跑龙套/ thing.rs
pub fn foo() {
println!("foo");
}
文件other_utils / other_thing.rs
#[path = "../utils/thing.rs"] mod thing;
pub fn bar() {
println!("bar");
thing::foo();
}