我想在其他几个结构之间共享一个结构Foo
能够提取这些数据。此结构的所有其他持有者将看到该值消失。
伪代码:
if boo.ref_to_foo.is_valid() {
let foo: Foo = boo.ref_to_foo.steal(); //1
} else {
//after executing 1 one time all come here
}
我不需要多线程。
Rc<RefCell<Foo>>
我想要的是什么? Deref for Rc
+ RefCell::borrow_mut
+ Option::take
,或者是一种更简单的方式来实现我想要的目标?
答案 0 :(得分:4)
是否有可以窃取数据的共享指针?
不,但您拥有创建一个所需的所有构建块。你自己
RefCell
提供的内部可变性。Rc
。 Option
。use std::rc::Rc;
use std::cell::RefCell;
struct Foo;
fn main() {
let foo1 = Rc::new(RefCell::new(Some(Foo)));
let foo2 = foo1.clone();
if foo1.borrow().is_some() {
let stolen = foo1.borrow_mut().take();
} else {
println!("Already stolen!")
}
if foo2.borrow().is_some() {
let stolen = foo2.borrow_mut().take();
} else {
println!("Already stolen!")
}
}
如果您愿意,可以将所有这些包装成单一类型。
另见: