Rust基础(7)-包、模块

包、模块

概述

  1. 包:Cargo的一个功能、允许构建、测试和分享crate(翻译:箱子)
  2. Crate:一个模块的树形结构,形成库或二进制项目
  3. 模块:通过use来使用,用来控制作用域和路径的私有性
  4. 路径:一个命名例如结构体、函数或模块等项的方式

包和Crate

  1. crate root是一个源文件,Rust编译器以它为起始点,并构成你的crate的根模块
  2. 包提供一系列功能的一个或多个Crate
  3. Crate root是src/main.rs或者是src/lib.rs。说明:如果只有main.rs则说明这个包只有一个crate(main),如果同时拥有main.rs和其它的lib.rs(不一定是这个名字),则说明拥有多个crate。
  4. crate会将一个作用域的相关功能分组到一起,使得该功能可以很方便的在多个项目之间共享。

使用模块控制作用域和私有性

  1. 创建一个lib可以通过命令cargo new --lib libname来进行创建
  2. 默认所有项(函数、方法、结构体、枚举、模块和常量)都是私有的,需要使用pub才能暴露给外部
  3. 创建基本的模块:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//创建模块
//如果不加入pub,mod中的一切都是私有的,无法对外访问
mod factory{
//生产冰箱
pub mod produce_refrigerator{
pub fn produce_re(){
println!("produce refrigerator!")
}
}

//生产洗衣机
mod produce_washing_machine{
fn produce_washing(){
println!("produce washing machine!!")
}
}
}
fn main() {
factory::produce_refrigerator::produce_re();
println!("Hello, world!");
}
  1. 按文件划分创建模块:
    (1). 在项目目录下创建lib:cargo new --lib mylib
    (2). lib/src中,创建文件:factory.rs,并写入:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //生产冰箱
    pub mod produce_refrigerator{
    pub fn produce_re(){
    println!("produce refrigerator!")
    }
    }

    //生产洗衣机
    mod produce_washing_machine{
    fn produce_washing(){
    println!("produce washing machine!!")
    }
    }

    (3). 同目录的lib.rs中,对外开放该lib:pub mod factory;

    1
    pub mod factory;

    (4). 项目根目录的Cargo.toml中,引入对mylib的依赖

    1
    2
    [dependencies]
    mylib = {path = "./mylib"}

    (5). main.rs调用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    use mylib::factory::produce_refrigerator;
    use mylib::factory::produce_refrigerator as A; //简化
    //use mylib::factory::*; //全部导入

    fn main() {
    mylib::factory::produce_refrigerator::produce_re(); //绝对路径
    produce_refrigerator::produce_re(); //使用use
    A::produce_re(); //简化
    }
  2. 子mod访问父mod,使用super

1
2
3
4
5
6
7
8
9
10
11
12
pub mod modB {
pub fn print_B(){
println!("B")
}

mod modC{
pub fn print_c(){
println!("C");
super::print_B();
}
}
}

使用外部第三方库

  1. Cargo.toml中加入依赖:
1
2
[dependencies]
rust-crypto = "0.2"
  1. main.rs中调用:
1
2
3
4
5
6
7
8
9
10
extern crate crypto;

use crypto::digest::Digest;
use crypto::sha3::Sha3;
fn main() {
let mut hasher = Sha3::sha3_256();
hasher.input_str("hello world");
let result = hasher.result_str();
println!("hash = {}",result);
}
  1. 运行
    会自动下载依赖的crate,并编译运行
1
cargo run

总结

本文编辑完毕

参考

[1] Rust 程序设计语言

  • Copyrights © 2017-2023 Jason
  • Visitors: | Views:

谢谢打赏~

微信