繁体   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