提问人:Hèctor M.C. 提问时间:10/13/2023 最后编辑:cafce25Hèctor M.C. 更新时间:10/13/2023 访问量:55
双链接 Rust 结构 [duplicate]
Double linking Rust structs [duplicate]
问:
这个问题在这里已经有答案了:
我使用什么生存期来创建循环引用的 Rust 结构? (1 个答案)
如何在安全的 Rust 中表达相互递归的数据结构? (4 个答案)
如何对复杂的递归数据结构(图)进行建模? (1 个答案)
上个月关闭。
我正在尝试实现一个对象集合,其中每个包含的对象也对它们所属的集合具有不可变的引用。
但是,我很难找到一种安全的方法。基本上,每次我尝试实例化该集合的一个元素时,集合引用的可变性或所有权都会发生变化,然后就无法完成缺失的步骤。
这是我尝试做的一个最小示例,您会注意到编译器在抱怨。
struct Collection<'a> {
elements: Vec<Element<'a>>,
}
struct Element<'a> {
collection: &'a Collection<'a>,
}
impl<'a> Element<'a> {
fn new(collection: &'a mut Collection<'a>) -> &'a mut Self {
let element = Self { collection }; // immutable borrow occurs here
collection.elements.push(element); // cannot borrow `collection.elements` as mutable
collection.elements.last_mut().unwrap() // cannot borrow `collection.elements` as mutable
}
}
查看链表实现,我看到他们正在使用原始指针。但恕我直言,重点是避免不安全的块,因为我需要取消引用它们。
所以我的问题是:有没有安全的方法可以实现我想要做的事情?这是一个非常糟糕的主意吗?还是应该使用原始指针,就像在链表实现中一样?
答: 暂无答案
评论