记录和元组之间是否存在差异,这不仅仅是语法差异?
是否存在性能差异?
元组和记录的实现是否相同?
你是否有使用元组可以完成的事情的例子,但没有记录(和 相反)?
答案 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描述 - 记录是生成的,而元组预先存在并且具有结构语义。如果您想要具有多态访问器的结构记录,则可以使用对象类型。