5

记录和元组之间有什么区别,而不仅仅是语法上的区别?

有性能差异吗?

元组和记录的实现是否相同?

您是否有可以使用元组但不能使用记录(反之亦然)完成的事情的示例?

4

2 回答 2

20

模数语法它们几乎相同。主要的语义区别在于元组是结构类型,而记录是名义类型。这意味着例如记录可以是递归的,而元组不能(至少在没有 -rectypes 选项的情况下不能):

type t = {a : int, b : unit -> t}  (* fine *)
type u = int * (unit -> u)         (* error *)

此外,记录可以有可变字段,元组不能。

FWIW,在 OCaml 的姊妹语言 SML 中,元组记录。也就是说,在 SML 中 (a,b,c) 只是 {1=a,2=b,3=c} 的语法糖,记录也是结构类型。

于 2012-05-07T12:52:49.060 回答
12

仅浮点记录或数组中的浮点字段未装箱存储,而此类优化不适用于元组。如果您要存储大量浮点数并且仅存储浮点数,那么使用记录很重要——您可以通过拆分混合浮点数/其他数据结构来获得内部仅浮点数记录。

其他差异在类型级别,Andreas 已经描述过——记录是生成的,而元组是预先存在的并且具有结构语义。如果您想要具有多态访问器的结构记录,您可以使用对象类型。

于 2012-05-07T20:57:55.633 回答