记录和元组之间是否存在除语法差异以外的差异?
是否存在性能差异?
元组和记录的实现是否相同?
您有哪些使用元组但无法使用记录(反之亦然)的示例?
记录和元组之间是否存在除语法差异以外的差异?
是否存在性能差异?
元组和记录的实现是否相同?
您有哪些使用元组但无法使用记录(反之亦然)的示例?
在模块语法方面,它们几乎相同。主要的语义差异在于元组是结构类型,而记录是名义类型。这意味着记录可以是递归的,而元组不能(至少没有使用-rectypes选项时):
type t = {a : int, b : unit -> t} (* fine *)
type u = int * (unit -> u) (* error *)
type v = int * int ref
然后说 snd some_v := 90210
。 - Asherah仅包含浮点数的记录或数组中的float字段将以未装箱的形式存储,而对元组没有这样的优化。如果您正在存储大量仅为浮点数的值,则使用记录非常重要 - 并且您可以通过将混合的浮点/其他数据结构拆分为内部仅包含浮点数的记录来获得优势。
另一个区别在于类型层面,并已由安德烈亚斯描述过 - 记录是生成的,而元组是预先存在并具有结构语义。如果您想要具有多态访问器的结构记录,可以使用对象类型。
mutable
关键字和<-
语法允许更容易地更新引用。 - Asherah