模块
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
在路径中使用 super
和 self
关键字可消除访问同名项时的歧义。
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...
> 此处输出代码运行结果