|
|
|
@ -33,7 +33,7 @@
|
|
|
|
|
|
|
|
|
|
### Box 允许创建递归类型
|
|
|
|
|
|
|
|
|
|
**递归类型**(_recursive type_)的值可以拥有另一个同类型的值作为其自身的一部分。但是这会产生一个问题,因为 Rust 需要在编译时知道类型占用多少空间。递归类型的值嵌套理论上可以无限地进行下去,所以 Rust 不知道递归类型需要多少空间。因为 box 有一个已知的大小,所以通过在循环类型定义中插入 box,就可以创建递归类型了。
|
|
|
|
|
**递归类型**(_recursive type_)的值可以拥有另一个同类型的值作为其自身的一部分。但是这会产生一个问题,因为 Rust 需要在编译时知道类型占用多少空间。递归类型的值嵌套理论上可以无限地进行下去,所以 Rust 不知道递归类型需要多少空间。因为 box 有一个已知的大小,所以通过在递归类型定义中插入 box,就可以创建递归类型了。
|
|
|
|
|
|
|
|
|
|
作为一个递归类型的例子,让我们探索一下 _cons list_。这是一个函数式编程语言中常见的数据类型,来展示这个(递归类型)概念。除了递归之外,我们将要定义的 cons list 类型相当简单,所以这个例子中的概念,在任何遇到更为复杂的涉及到递归类型的场景时都很实用。
|
|
|
|
|
|
|
|
|
|