rust - Hack Rust 可见性和隐私

标签 rust class-visibility

我尝试使用 struct来自不使用 pub 的外部 crate key 。
我想最好的解决办法是打开一个 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 - 在这个例子中,我们试图导入一个模块而不是一个结构......不确定它是否会改变任何东西。
不幸的是,the docs for error E0603如果我们不拥有该 crate ,它就没有真正的帮助。 the docs on visibility and privacy in the Rust Reference 相同.

最佳答案

Any idea for Rust?


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

Compile error: error[E0603]: module internal is private - in this example, we are trying to import a module and not a structure... Not sure if it changes anything.


不。该死的,命名方案实际上是在告诉您私有(private)模块是内部细节,再清楚不过了,这不是您想要触摸的。 CompressionProps was specifically made non-public .

关于rust - Hack Rust 可见性和隐私,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64641484/

相关文章:

vector - 项目签名的类型中不允许使用类型占位符 `_`

rust - Rust 中相同类型的相同特征的多个实现

c# - 类实例创建限制

rust - 如何获取传递给内部属性宏的模块内容?

string - 是否有 UTF-16 字符串类型的 Rust 库? (用于编写 Javascript 解释器)

rust - 如何使用 BTreeSet 的自定义比较器函数?

c# - 允许 Newtonsoft 的 JsonConvert 访问内部 getter/setter

module - 如何在 Rust 中相互隐藏兄弟模块?

c# - 我可以将 C# 扩展方法的可见性限制为同一程序集中的类吗?

css - 这是视觉隐藏事物的更好方法,clip : rect(0, 0, 0, 0) 或 visibility : hidden?