结构体的可见性
结构体的字段也是一个可见性的层次。字段默认拥有私有的可见性,也可以加上 pub
修
饰语来重载该行为。只有从结构体被定义的模块之外访问其字段时,这个可见性才会
起作用,其意义是隐藏信息(即封装,encapsulation)。
mod my {
// 一个公有的结构体,带有一个公有的字段(类型为泛型 `T`)
pub struct OpenBox<T> {
pub contents: T,
}
// 一个公有的结构体,带有一个私有的字段(类型为泛型 `T`)
#[allow(dead_code)]
pub struct ClosedBox<T> {
contents: T,
}
impl<T> ClosedBox<T> {
// 一个公有的构造器方法
pub fn new(contents: T) -> ClosedBox<T> {
ClosedBox {
contents: contents,
}
}
}
}
fn main() {
// 带有公有字段的公有结构体,可以像平常一样构造
let open_box = my::OpenBox { contents: "public information" };
// 并且它们的字段可以正常访问到。
println!("The open box contains: {}", open_box.contents);
// 带有私有字段的公有结构体不能使用字段名来构造。
// 报错!`ClosedBox` 含有私有字段。
//let closed_box = my::ClosedBox { contents: "classified information" };
// 试一试 ^ 取消此行注释
// 不过带有私有字段的结构体可以使用公有的构造器来创建。
let _closed_box = my::ClosedBox::new("classified information");
// 并且一个结构体中的私有字段不能访问到。
// 报错!`content` 字段是私有的。
//println!("The closed box contains: {}", _closed_box.contents);
// 试一试 ^ 取消此行注释
}
参见:
当前内容版权归 rust-lang-cn 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 rust-lang-cn .