rust - 为什么我们不能将 RefCell 用于递归数据结构?

标签 rust

为什么我们不能将 RefCell 用于 Rust 中的递归数据结构?

无效:

enum List {
    Cons(i32, RefCell<List>),
    Nil,
}

有效:

enum List {
    Cons(i32, Rc<List>), // or Box<List>
    Nil,
}

最佳答案

RefCell 包含内部对象,将其包裹起来,它不是堆分配值。这就是编译器说“无间接递归”的原因:RefCell 不是间接。

另一方面,

BoxRc 包含对分配在别处的对象的引用,因此是间接。 p>

如果没有间接寻址,List 枚举最终会变成无限,因为每个 Cons 都在其 RefCell< 中包含一个完整的 List 枚举

您不能执行将自身包含为值,仅作为指针或引用的递归数据结构。

关于rust - 为什么我们不能将 RefCell 用于递归数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54022450/

相关文章:

rust - 如果体系结构是 32 位还是 64 位,如何检查 Rust?

rust - 如何解决由于使用组合器调整流而导致的编译错误 “Unpin not implemented for GenFuture”?

if-statement - 何时在 Rust 中使用 `std::cmp::ordering` 而不是 `if` 语句

interface - 如何定义特征的可选方法?

arrays - 比较定长数组

rust - 返回值的Rust生命周期问题

rust - 如何匹配 Rust 中的 &'static str

time - 如何将 SystemTime 格式化为字符串?

string - 在接口(interface)上使用 Into<String> - Vec<Into<String>> 的成本为零?

rust - 将非复制变量移动到异步闭包 : captured variable cannot escape `FnMut` closure body