一般来说,是否有一个用于拥有值的枚举/特征,当您不想指定如何确切地拥有该值(共享与否),但您只想拥有它。
我需要在结构中存储对闭包的引用,这意味着它们必须与结构存在的时间一样长。当然,我无法复制它们,所以它们需要作为引用。但我不想做限制,所以结构的用户应该能够选择他们想要如何转移所有权。
当您无法复制值或值非常大时,这是一个普遍问题。
很一般的例子,我要找的是这个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
。然后 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
,它也将拥有引用。但是,它不会拥有所引用的项目。
关于rust - 拥有一个值的一般方式(不要指定 `Rc` 或 `Box` ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31215418/