» Rust快速入门 » 1. 基础篇 » 1.10 模块

模块

Rust 提供了一个强大的模块系统,可用于将代码分层次地分割为逻辑单元(即模块)。

可见性

默认情况下,模块中的项具有私有可见性,但可以使用 pub 修饰符覆盖这一点。

mod a_mod {
    fn private_func() {
        println!("a_mod::private_func");
    }

    // 使用 `pub` 修饰符来覆盖默认可见性。
    pub fn func() {
        println!("a_mod::func");
    }
}

fn main() {
    // OK
    a_mod::func();
    // error[E0603]: function `private_func` is private
    a_mod::private_func();
}

结构体可见性

结构体字段也有可见性级别。可见性默认为私有,也可以使用 pub 修饰符覆盖。

mod a_mod {
    // 具有公共字段的公共结构体
    pub struct S1<T> {
        pub content: T,
    }

    // 具有私有字段的公共结构体
    pub struct S2<T> {
        content: T,
    }
}

fn main() {
    // OK
    let s1 = a_mod::S1 {content: "public"};
    println!("content: {}", s1.content);

    // error[E0451]: field `content` of struct `S2` is private
    let s2 = a_mod::S2 {content: "private"};
    // error[E0616]: field `content` of struct `S2` is private
    println!("content: {}", s2.content);
}

use

use 声明可将完整路径绑定到新名称,以便简短访问。

use crate::deeply::nested::{
    a_function,
    ATraitType
};

fn main() {
    a_function();
}

你可以使用 as 关键字将导入绑定到不同的名称:

use deeply::nested::a_function as better_name_function;

super and self

在路径中使用 superself 关键字可消除访问同名项时的歧义。

fn function() {
    println!("called `function()`");
}

mod a_mod {
    fn function() {
        println!("called `a_mod::function()`");
    }

    pub fn call() {
        self::function(); // called `a_mod::function()
        function(); // called `a_mod::function()

        super::function(); // called `function()`
    }
}

fn main() {
    a_mod::call();
}

代码挑战

尝试修改编辑器中提供的代码以完成 calculator

Loading...
> 此处输出代码运行结果
上页
下页