簡體   English   中英

Rust中的公共/私有結構

[英]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.rsmain.rs的文件)是您的包的根模塊。 它定義了板條箱的公共接口,即板條箱根目錄中的公共項目可以從其他板條箱中訪問。

在你的例子中,你寫了mod prey; 這將prey模塊定義為私有模塊,因此無法從其他條板箱訪問prey模塊中的項目(除非您使用pub use導出它們)。 這意味着你應該讓prey::cycle::Prey公開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM