使用框创建递归枚举和结构

如果你尝试在不使用 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 一个大小。