为什么 Rust 禁止递归数据结构以及如何正确创建它们?
大家好!我开始学习 Rust 并遇到了一个奇怪的错误。我想像在 C 或 Python 中那样创建一个简单的链表:
```rust
struct Node {
value: i32,
next: Node, // 错误:递归类型 `Node` 具有无限大小
}
```
编译器说:“递归类型 `Node` 具有无限大小”。我理解 Rust 对类型大小要求严格,但为什么这是个问题?在 C 中我可以写 `struct Node { int value; struct Node* next; }` —— 那里用了指针,一切正常。在 Python 中甚至可以存储对象自身。
为什么 Rust 禁止这种递归?那么如何创建列表、树和其他递归结构?我听说过 `Box`,但不明白为什么它能解决问题。请用简单的语言和例子解释一下。提前谢谢!
<<>>
为什么 Rust 禁止直接递归?
问题在于 Rust 必须在编译时知道每个类型的确切大小。当你写 next: Node 时,编译器试图计算