【发布时间】:2016-11-17 16:22:31
【问题描述】:
我们有一个带有LinkedList 的结构:
struct XPipeline {
handlers: LinkedList<XHandler>,
}
XPipeline 是所有XHandler 对象的所有者,可以访问和修改它们。
我们已经有了处理程序列表;现在我们需要每个处理程序都可以引用列表中的邻居。也就是说,每个处理程序的方法都可以引用处理程序的邻居,修改它们并调用它们的方法。
我的第一个想法是这样的:我为每个处理程序提供 prev 和 next 字段,它们将引用邻居。通过在列表中添加一个新的处理程序,我用相应的引用初始化这些字段。现在我可以在所有处理程序的方法中使用这些引用。 (在 C++ 中使用指针会很容易)。
问题是:只允许一个所有者(即具有修改权限)。并且该所有者(所有处理程序)已经是XPipeline 对象。我该如何解决?也许,通过雇用:
handlers: Rc<RefCell<LinkedList<XHandler>>>
但具体如何?
【问题讨论】:
-
在问这个问题之前请editshow what research you performed。当你问这个问题时,rust 问题的首页上有another circular linked-list question;这有什么不同? 50 or so other rust linked list questions 呢?也许其中一些会有用?一旦我们知道所有现有答案的困惑之处,我们就可以为您的独特问题提供有用的答案。
-
我搜索了提供的链接,但没有找到答案。所有的问题都是关于其他话题的。例如,another circular linked-list question 是关于使用一种迭代器实现列表。我要问的是:我有一个标准的通用 LinkedList + 每个元素都可以直接引用它的邻居(所以,它是一种双向列表)。
-
听起来您正在寻找一种侵入式数据结构。
标签: reference linked-list rust ownership borrowing