[英]Public/Private struct in Rust
我有一個小項目,我想封裝一個struct的字段並使用實現的方法。
├── src
├── main.rs
├── predator
└── prey
├── cycle.rs
└── mod.rs
cycle.rs
struct Prey {
name: String,
}
impl Prey {
pub fn new(n: String) -> Prey {
Prey { name: n }
}
pub fn get_name(&self) -> &str {
self.name.as_str()
}
}
我想把Prey
留給私人。
main.rs
use prey::cycle::Prey;
mod prey;
fn main() {
let pr = Prey::new("Hamster".to_string());
println!("Hello, world! {}", pr.get_name());
}
我收到一個錯誤:
error: struct `Prey` is private
我知道如果我在struct Prey {}
之前放置pub
,我會得到預期的結果。 我將很感激解釋,如何,為什么不和/或最佳實踐。
可見性適用於模塊級別。 如果您希望模塊X可以訪問模塊Y中的項目 ,則模塊Y必須將其公開。
模塊也是項目。 如果你沒有公開一個模塊,那么它就是你的箱子的內部。 因此,您不必擔心將該模塊中的項目公開; 只有您的箱子才能訪問它。
包根(通常是名為lib.rs或main.rs的文件)是您的包的根模塊。 它定義了板條箱的公共接口,即板條箱根目錄中的公共項目可以從其他板條箱中訪問。
在你的例子中,你寫了mod prey;
。 這將prey
模塊定義為私有模塊,因此無法從其他條板箱訪問prey
模塊中的項目(除非您使用pub use
導出它們)。 這意味着你應該讓prey::cycle::Prey
公開。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.