使用框创建递归枚举和结构
如果你尝试在不使用 Box 的情况下在 Rust 中创建递归枚举,则会出现编译时错误,指出无法调整枚举的大小。
// This gives an error!
enum List {
Nil,
Cons(i32, List)
}
为了使枚举具有定义的大小,递归包含的值必须在 Box 中。
// This works!
enum List {
Nil,
Cons(i32, Box<List>)
}
这是因为 Box 总是具有相同的大小,无论 T 是什么,这允许 Rust 给 List 一个大小。