rust - 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参考中关于可见性和隐私的文档也是如此。
解决方案
对 Rust 有任何想法吗?
如果一个板条箱没有暴露某些东西,那么那个东西不适合你使用。这可能是一个疏忽,也可能是一个设计决策,这并不重要。
编译错误:错误[E0603]:模块
internal
是私有的 - 在这个例子中,我们试图导入一个模块而不是一个结构......不确定它是否会改变任何东西。
不,该死,命名方案实际上是在告诉您私有模块是内部细节,再清楚不过了,这不是您想要触摸的。CompressionProps
是专门非公开的。
推荐阅读
- python - 如何在 Python 中处理无限和
- java - 建不起来。洗不干净。找不到 viewmodel.aar (Android Studio)
- python - 错误的 Voigt 输出/卷积与不对称 x 输入
- xml - 如何根据属性从更多下拉菜单中隐藏自定义操作?
- asp.net - Asp 页面未链接到下一个视图
- c# - 使用 Windows Authenticated User (Active Directory) 在 IIS .NET Framework 应用程序中运行进程
- excel - 过滤后的行地址
- go - Gauge 中的动态普罗米修斯标签
- regex - 匹配逗号分隔的用户故事的模式
- mfc - 如果分辨率太小,调整大小的对话框不会显示滚动条