gpt4 book ai didi

struct - Rust 中的公共(public)/私有(private)结构

转载 作者:行者123 更新时间:2023-11-29 07:46:34 26 4
gpt4 key购买 nike

我有一个小项目,我想封装一个结构的字段并使用已实现的方法。

├── 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 设为私有(private)。

ma​​in.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

我知道如果我将 pub 放在 struct Prey {} 之前,我会得到预期的结果。如果您能提供解释、方法、原因和/或最佳实践,我将不胜感激。

最佳答案

可见性在模块级别起作用。如果您希望模块 X 可以访问 item在模块 Y 中,模块 Y 必须将其公开。

模块也是项目。如果你不公开一个模块,那么它就在你的箱子内部。因此,您不必担心将该模块中的项公开;只有您的箱子才能访问它。

包根(通常是名为lib.rsmain.rs 的文件)是包的根模块。它定义了 crate 的公共(public)接口(interface),即 crate root 中的公共(public)项目可以从其他 crate 访问。

在您的示例中,您编写了 mod prey;。这将 prey 模块定义为私有(private),因此 prey 模块中的项目无法从其他 crate 访问(除非您使用 pub use 重新导出它们) .这意味着您应该将 prey::cycle::Prey 公开。

关于struct - Rust 中的公共(public)/私有(private)结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27238547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com