为什么我们不能将 RefCell
用于 Rust 中的递归数据结构?
无效:
enum List {
Cons(i32, RefCell<List>),
Nil,
}
有效:
enum List {
Cons(i32, Rc<List>), // or Box<List>
Nil,
}
最佳答案
RefCell
包含内部对象,将其包裹起来,它不是堆分配值。这就是编译器说“无间接递归”的原因:RefCell
不是间接。
Box
和 Rc
包含对分配在别处的对象的引用,因此是间接。 p>
如果没有间接寻址,List
枚举最终会变成无限,因为每个 Cons
都在其 RefCell< 中包含一个完整的
。 List
枚举
您不能执行将自身包含为值,仅作为指针或引用的递归数据结构。
关于rust - 为什么我们不能将 RefCell 用于递归数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54022450/