OCaml中记录和元组之间的区别是什么

时间:2012-05-07 12:15:19

标签: ocaml

记录和元组之间是否存在差异,这不仅仅是语法差异?

是否存在性能差异?

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

你是否有使用元组可以完成的事情的例子,但没有记录(和 相反)?

2 个答案:

答案 0 :(得分:15)

模数语法它们几乎相同。主要的语义差异是元组是结构类型,而记录是名义类型。这意味着例如记录可以递归而元组不能(至少没有-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}的语法糖,记录也是结构类型。

答案 1 :(得分:10)

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

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