Rust语言程序员

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

我们需要通过文件和目录的形式来管理我们的项目模块节点

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
上一篇下一篇

猜你喜欢

热点阅读