And*_*erg 15
Modulo语法几乎相同.主要的语义差异是元组是结构类型,而记录是名义类型.这意味着例如记录可以递归而元组不能(至少没有-rectypes选项):
type t = {a : int, b : unit -> t} (* fine *)
type u = int * (unit -> u) (* error *)
Run Code Online (Sandbox Code Playgroud)
而且,记录可以有可变字段,元组不能.
FWIW,在OCaml的姐妹语言SML中,元组是记录.也就是说,在SML(a,b,c)中,{1 = a,2 = b,3 = c}只是语法糖,记录也是结构类型.
gas*_*che 10
浮动记录或数组中的浮点字段是未装箱的,而没有这样的优化适用于元组.如果要存储大量浮点数并且只存储浮点数,则使用记录非常重要 - 您可以通过拆分混合浮点数/其他数据结构来获得内部浮动记录.
其他差异在类型级别,并且已经由Andreas描述 - 记录是生成的,而元组预先存在并且具有结构语义.如果您想要具有多态访问器的结构记录,则可以使用对象类型.