结构体可见性
结构体的字段具有额外的可见性级别。字段默认为私有,可以使用 pub
修饰符来覆盖。这种可见性只在从结构体定义模块外部访问时才有意义,其目的是实现信息隐藏(封装)。
mod my { // 一个具有泛型类型 `T` 公有字段的公有结构体 pub struct OpenBox<T> { pub contents: T, } // 一个具有泛型类型 `T` 私有字段的公有结构体 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: "公开信息" }; // 且可以正常访问其字段。 println!("打开的盒子包含:{}", open_box.contents); // 具有私有字段的公有结构体不能使用字段名来构造。 // 错误!`ClosedBox` 有私有字段 //let closed_box = my::ClosedBox { contents: "机密信息" }; // TODO ^ 尝试取消此行注释 // 然而,具有私有字段的结构体可以使用公有构造函数创建 let _closed_box = my::ClosedBox::new("机密信息"); // 且无法访问公有结构体的私有字段。 // 错误!`contents` 字段是私有的 //println!("封闭的盒子包含:{}", _closed_box.contents); // TODO ^ 尝试取消此行注释 }