gpt4 book ai didi

rust - 我怎样才能使一个结构成为非公开的,而不是将它从 lib.rs 中移走?

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

考虑这个简单的箱子:

src/lib.rs

mod internal;

use internal::f;

pub(crate) struct Foo {}

pub fn g() {
f();
}

src/internal.rs

use Foo;

pub fn f() -> Foo {
unimplemented!();
}

我只想从包中导出 g 函数。我还想在 lib.rs 中定义 Foo 以简化源代码的阅读。这是 crate 的一个重要结构,所以我想把它移到第一个任何潜在读者都会打开的文件。

编译器报告:

error[E0446]: private type `Foo` in public interface
--> src/internal.rs:3:1
|
3 | / pub fn f() -> Foo {
4 | | unimplemented!();
5 | | }
| |_^ can't leak private type

我该如何解决这个问题?为什么它是私有(private)的,而它是公开的?

最佳答案

虽然不难发现这种情况,但 pub 允许私有(private)类型实际上是不一致的。 pub 意味着该项目可能可以在 crate 外使用。您没有再导出它并不重要,可能是您再导出它。

该决定在项目声明中是局部的,以便于查看某些项目是否可以公开。如果您在项目中的一个随机文件中,您可以查看某个项目是否绝对不会因缺少 pub 说明符或 pub 上的约束而暴露。这显着提高了代码的可读性。

更多详细信息,请阅读相关RFC或在 tracking issue for the private_in_public lint

关于rust - 我怎样才能使一个结构成为非公开的,而不是将它从 lib.rs 中移走?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45292104/

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