使用框建立遞迴列舉和結構
如果你嘗試在不使用 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 一個大小。