记录

记录类似于元组,但组件的名称为:

var x = (a=1, b="hello", c=42.0);
println$ x.b;

实际上,您可以使用空白名称,也可以省略名称:

var x = (a=1,42.0,n""="What?");

注意特殊标识符表单的使用 n"..." 其中标识符的文本长度为零。

重复字段

记录中的字段名称可以重复:

var x = (a=1,a=2,32,77);

在这种情况下,当字段名用于访问组件时,它引用该字段最左边的实例。虽然单独来看这可能是一个不寻常的特性,但它需要支持polyrecords(行多态性)。

有一种特殊情况:如果所有字段名都为空,则记录是一个元组。所以事实上元组只是记录的一个特例。

功能应用

早些时候我们看到了 function application ,但函数应用程序隐式地在元组和记录上执行:

fun f(x:int,y:double)
// accepts either of the following
f (1,2.1)
f (x=1,y=2.1)

如果使用名称,顺序无关紧要,但重复的除外。