首页 > 解决方案 > Hack Rust 可见性和隐私

问题描述

我尝试使用struct不使用pub密钥的外部板条箱中的 a 。

我想最好的解决办法是打开一个 PR,但我的好奇心在这里被触发了。

在 C++ 中,这很容易。我们可以做的:

#define private public
#include <...> // import public as public AND also private as public
#undef private

这将在解析代码时欺骗编译器,因此我们可以访问该类的所有方法/字段。

对 Rust 有任何想法吗?

这是一个具体的例子:

use warp::{
    compression::{Compression, internal::CompressionProps},
    reply::Response,
};

pub enum CompressionAlgorithms {
    Brotli(Compression<dyn Fn(CompressionProps) -> Response>),
    Deflate(Compression<dyn Fn(CompressionProps) -> Response>),
    Gzip(Compression<dyn Fn(CompressionProps) -> Response>),
}

编译错误:error[E0603]: module `internal` is private- 在这个例子中,我们试图导入一个模块而不是一个结构......不确定它是否会改变任何东西。

不幸的是,如果我们不拥有该板条箱,则错误 E0603 的文档并没有真正的帮助。Rust参考中关于可见性和隐私的文档也是如此

标签: rustclass-visibility

解决方案


对 Rust 有任何想法吗?

如果一个板条箱没有暴露某些东西,那么那个东西不适合你使用。这可能是一个疏忽,也可能是一个设计决策,这并不重要。

编译错误:错误[E0603]:模块internal是私有的 - 在这个例子中,我们试图导入一个模块而不是一个结构......不确定它是否会改变任何东西。

不,该死,命名方案实际上是在告诉您私有模块是内部细节,再清楚不过了,这不是您想要触摸的。CompressionProps是专门非公开的


推荐阅读