Rust 中的 mod (模块)

起步

初看《Rust 程序设计语言》第七章的模块管理时,完全有不知所云之感。看完就“懵”住,也不晓得 mod 要怎么用。上 B 站找相关视频,稍解惑,却未细讲单个文件如何拆分到多个文件。最后在 github 找到 rust 语言编写的项目,方如梦初醒。

我很喜欢这种一致性设计,也就简单说一下。

mod 关键字

在 rust 中,可用 mod 关键字划分代码作用域,使代码结构清晰。

mod 的基本使用:

// 学校
mod school {
    // 教师
    mod teacher {
        fn num() -> i32 {  // 返回教师人数
            5
        }
    }
    // 学生
    mod student {
        fn num() -> i32 {  // 返回学生人数
            120
        }
    }
}

上述示例代码就是一个层次清晰的树状结构。mod [module_name] { ... } 会划出一个代码块,将一类你认为可以放在一起的放在一起。

Rust 中的项:函数、方法、结构体、枚举、模块和常量。

要使用模块中的函数,可用::符号作为路径分割符。比方你要获取学校中教师的数量,代码可以如下:

school::teacher::num();

事实上,你想在 main 函数中使用 school::teacher::num() 是会编译出错的,你会得到:“this module is private”。mod 会在控制作用域的同时,控制私有性。默认情况下,模块中的内容均为私有,对外不可见。pub 关键字可改变这种默认行为。

mod school {
    // 对外可见
    pub mod teacher {
        pub fn num() -> i32 {
            5
        }
    }

    // 对外不可见
    mod student {
        fn num() -> i32 {
            120
        }
    }
    
    // classroom 模块对外可见
    pub mod classroom {
        // num 函数对外不可见
        fn num() -> i32 {
            6
        }
    }
}

fn main() {
    // school::teacher::num() **可**正常使用
    let teacher_nums = school::teacher::num();
    println!("{}", teacher_nums);

    // school::student::num() **不可**正常使用
    // let teacher_nums = school::student::num();
}

mod 还可以把 B 模块引入到 A 模块中。如上述代码,teacher 模块直接写到 school 模块,teacher 理所当然就在 school 里。你也可以把子模块写到“世界各地”,再用 mod 把它们组合起来:

pub mod s
  • 26
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值