4 个版本
0.2.0 | 2024 年 6 月 7 日 |
---|---|
0.1.2 | 2024 年 6 月 7 日 |
0.1.1 | 2024 年 6 月 7 日 |
0.1.0 | 2024 年 6 月 7 日 |
#60 在 #pointers
每月 36 次下载
12KB
88 行
什么是 Refcon?
此crate提供Refcon
枚举,用于封装类型T
的具体实例或其引用。
通过实现AsRef<T>
,Refcon
允许两种变体无缝地表现为一个T
的引用。
const ZERO = ABigStruct::costly_initializer();
let v: Vec<ABigStruct> = (0..10_000)
.map(|i|
if i < 1_000 {
Refcon::from(&ZERO)
} else {
Refcon::from(ABigStruct::new(i))
})
.collect();
// [...]
for x in {
x.do_something();
}
何时不使用 Refcon
T
小于两个机器字长 - 在这种情况下,您仍然应该复制所有内容;- 您无法承担/不想为访问内部值的双向间接费用付费;
- 您不想为构建具体变体的额外内存复制付费;
何时使用 Refcon
- 您想混合值和引用:例如,如果您有一个包含对预计算值或临时值引用的向量的情况,或者如果 trait 中的迭代器根据实现可能迭代直接值或引用值。