使用框建立遞迴列舉和結構

如果你嘗試在不使用 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 一個大小。