一般来说,当您不想指定时,是否有一个针对拥有值的枚举/特征how确切地说,该值是拥有的(无论共享与否),但您只想拥有它。
我需要将对闭包的引用存储在结构中,这意味着它们必须与结构一样存在。当然,我无法复制它们,因此它们需要作为参考。但我不想做出限制,因此结构的用户应该能够选择他们想要如何转移所有权。
当您无法复制值或它们非常大时,这是一个普遍问题。
非常一般的例子,我正在寻找的是这个Owned<T>
struct Holder<T> {
value: Owned<T>,
}
...
let rc = Rc::new(variable);
let holder = Holder::new(rc.clone());
let holder2 = Holder::new(Box::new(variable2));
这种类型的一个非常简单的“实现”的例子是:
enum Owned<T> {
Unique(Box<T>),
Shared(Rc<T>),
}
我希望我能解释我的意思。
我想你可能会对“拥有”这个词感到有点困惑,这在 Rust 中是可以理解的!每个价值都属于某物,但有时价值指的是不属于你的东西。
就您而言,您只需要接受T
. Then Holder
将拥有T
:
use std::rc::Rc;
struct Holder<T> {
value: T,
}
impl<T> Holder<T> {
fn new(v: T) -> Holder<T> {
Holder { value: v }
}
}
fn main() {
let variable = "Hello world".to_owned();
let variable2 = "Hello moon".to_owned();
let rc = Rc::new(variable);
let holder = Holder::new(rc.clone());
let holder2 = Holder::new(Box::new(variable2));
}
即使您传递了对Holder
,它将拥有参考资料。然而,它不会拥有所提及的项目。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)