Rust 从基础到实践(10) 模块
2019-04-06 本文已影响16人
zidea
rust_logo.jpg
项目要想做到就得有模块化,今天看 Rust 如何进行模块化。定义模块使用mod
关键字来声明模块,下面定义了 A 、B 和 C 三个模块,B 是嵌套在 A 中,这些模块中都提供了 a 和 b 方法。
mod A{
fn a(){}
fn b(){}
mod B {
fn a(){}
fn b(){}
}
}
mod C{
fn a(){}
fn b(){}
}
fn main(){
A::b();
}
这样调用模块 A 中 b 方法,编译时候提示 b 是一个私有函数。
mod A{
pub fn a(){}
pub fn b(){}
mod B {
fn a(){}
fn b(){}
}
}
我们需要在 b 前面添加 pub 表示在模块 A 外通过 A::b() 是可以调用到这个方法的。
fn main(){
A::b();
A::B::a()
}
因为模块 B 在模块 A 中我们也需要将其定义为 pub 这样外面才能调用到。
error[E0603]: module `B` is private
--> src/main.rs:17:8
|
17 | A::B::a()
|
这样修改后我们 main 中就可以访问到 A::B::b() 方法了。
mod A{
pub fn a(){}
pub fn b(){}
pub mod B {
pub fn a(){}
pub fn b(){}
}
}
现在我们虽然通过模块对项目进行划分为 A B 和 C 模块。但是在实际开发过程中我们是不能将所有模块都写入一个文件。
屏幕快照 2019-04-06 上午9.27.26.png我们需要通过文件和目录的形式来管理我们的项目模块节点
- 定义文件夹 A 作为 A 模块
- 外层定义 C.rs 做 C 模块
下面我们分别看看这些文件中包含哪些具体的内容
B.rs
pub fn a(){}
pub fn b(){}
A/mod.rs
这里值得注意我们在 A 文件夹(相当于定义模块A)需要定义 mod.rs 作为模块 A 的入口文件。这里定义名称是有要求的,需要定义为 mod.rs。
pub mod B;
pub fn a(){}
pub fn b(){}
C.rs
pub fn a(){}
pub fn b(){}
main.rs
fn main(){
A::b();
A::B::a();
}
americancaptain3_20160428193042_09.jpg
pub mod a {
pub mod b{
pub mod c{
pub mod d{
pub fn e(){
}
}
}
}
}
fn main(){
a::b::c::d::e();
}
这样层层嵌套,实在是麻烦。当然有简便方法
use a::b::c::d;
fn main(){
d::e();
}
枚举也是有命名空间,同样可以 use 定义来节省写代码的量。
enum Ex {
A,
B,
C,
}
use Ex::{A,C};
fn main(){
d::e();
A
}
这里同样支持通配符
use Ex::*
th.jpeg