Rust 程式設計中的結構可見性
Rust 中的結構包含額外的可見性級別。這些級別可以根據開發人員的便利性進行修改。
在正常情況下,Rust 中的struct 的可見性是私有的,可以使用 pub 修飾符將其變為公有。
需要注意的是,只有當我們嘗試從定義模組外部訪問 struct 欄位時,這種可見性情況才有意義。
當我們隱藏struct 的欄位時,我們只是試圖封裝資料。
示例
考慮下面顯示的示例 −
mod my {
// A public struct with a public field of generic type `T`
pub struct OpenStruct {
pub contents: T,
}
// A public struct with a private field of generic type `T`
#[allow(dead_code)]
pub struct ClosedStruct {
contents: T,
}
impl ClosedStructx {
// A public constructor method
pub fn new(contents: T) -> ClosedStruct {
ClosedStrut {
contents: contents,
}
}
}
}
fn main() {
// Public structs with public fields can be constructed as usual
let open_box = my::OpenStruct {
contents: "public information"
};
// and their fields can be normally accessed.
println!("The open box contains: {}", open_box.contents);
}在上面的程式碼中,我們建立了兩個 struct,它們本質上都是公有的,但是其中一個 struct 的欄位設定為公有,而另一個 struct 的欄位是私有的。稍後在 main 函式中,我們嘗試構造名為 OpenStruct 的公有 struct 的公有欄位,然後列印該欄位。
輸出
The open box contains: public information
一切都執行良好。但是,如果現在我們嘗試訪問名為 ClosedStruct 的結構,以及它的欄位,就像我們對 OpenStruct 所做的那樣,我們將發生此錯誤。
程式碼
let closed_box = my::ClosedBox { contents: "classified information" };我們將得到一個錯誤。
輸出
error[E0451]: field `contents` of struct `ClosedBox` is private
--> src/main.rs:32:38
|
32| let closed_box = my::ClosedBox { contents: "classified
information" };
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ private field儘管值得注意的是,可以使用公共建構函式建立具有私有欄位的結構,但我們仍然無法訪問私有欄位。
let _closed_box = my::ClosedBox::new("classified information");它將正常工作。
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP