【发布时间】:2020-02-29 20:18:04
【问题描述】:
我有两个数组:
struct Data {
all_objects: Vec<Rc<dyn Drawable>>;
selected_objects: Vec<Rc<dyn Drawable>>;
}
selected_objects 保证是all_objects 的子集。我希望能够以某种方式添加或删除对选定对象的 mutable 引用。
我可以轻松地将对象添加到selected_objects:
Rc::get_mut(selected_object).unwrap().select(true);
self.selected_objects.push(selected_object.clone());
但是,如果我稍后再试:
for obj in self.selected_objects.iter_mut() {
Rc::get_mut(obj).unwrap().select(false);
}
这会产生一个运行时错误,与 get_mut 的文档相匹配:“否则返回 None,因为改变共享值是不安全的。”
但是,我真的希望能够访问和调用两个数组上的任意方法,这样我就可以有效地对选择执行操作,同时仍然能够对所有对象执行操作。
似乎Rc 不支持这一点,似乎RefMut 缺少一个Clone() 允许我将其放入多个数组中,而且实际上不支持dyn 类型。 Box 也缺少 Clone()。所以我的问题是,如何将可写指针存储在多个数组中?是否有另一种类型的智能指针用于此目的?我需要嵌套它们吗?还有其他更合适的数据结构吗?有没有办法放弃可写引用?
【问题讨论】:
-
elected_objects is guarenteed to be a subset of all_objects- 所以它是slice? -
我不认为,它们不能保证是连续的或均匀分布的。它只是一个任意子集
标签: arrays rust smart-pointers