[英]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.