一个记录值是字段的有序序列。甲字段由一个的字段名,这是一个文本值唯一地标识记录内的字段,以及字段值。字段值可以是任何类型的值,包括记录。可以使用初始化语法构造记录,如下所示:
记录表达式:
[
字段列表选择 ]
字段列表:
字段
字段 ,
字段列表
字段:
字段名称 =
表达式
字段名称:
通用标识符
引用标识符
下面的示例构造一个记录,其字段以x
value1
命名y
,字段以value命名2
。
复制
代码语言:javascript复制[ x = 1, y = 2 ]
下面的示例构造一个带有a
名为 a 的字段和嵌套记录值的记录。嵌套记录有一个名为b
value的字段2
。
复制
代码语言:javascript复制[ a = [ b = 2 ] ]
在评估记录表达式时,以下内容成立:
- 分配给每个字段名称的表达式用于确定关联字段的值。
- 如果分配给字段名称的表达式在计算时产生一个值,则该值将成为结果记录的字段的值。
- 如果分配给字段名称的表达式在评估时引发错误,则引发错误的事实与该字段以及引发的错误值一起记录。对该字段的后续访问将导致使用记录的错误值重新引发错误。
- 该表达式在类似于父环境的环境中进行评估,仅合并了与记录的每个字段的值相对应的变量,除了被初始化的字段。
- 在访问相应字段之前,不会评估记录中的值。
- 记录中的值最多被评估一次。
- 表达式的结果是一个带有空元数据记录的记录值。
- 记录中字段的顺序由它们在record-initializer-expression 中出现的顺序定义。
- 指定的每个字段名称在记录中都必须是唯一的,否则会出错。名称使用顺序比较进行比较。
复制
代码语言:javascript复制 [ x = 1, x = 2 ] // error: field names must be unique
[ X = 1, x = 2 ] // OK
没有字段的记录称为空记录,其写法如下:
复制
代码语言:javascript复制[] // empty record
虽然在访问一个字段或比较两个记录时,记录字段的顺序并不重要,但在其他上下文中很重要,例如在枚举记录的字段时。
相同的两条记录在获取字段时会产生不同的结果:
复制
代码语言:javascript复制Record.FieldNames([ x = 1, y = 2 ]) // [ "x", "y" ]
Record.FieldNames([ y = 1, x = 2 ]) // [ "y", "x" ]
可以使用该Record.FieldCount
函数确定记录中的字段数。例如:
复制
代码语言:javascript复制Record.FieldCount([ x = 1, y = 2 }) // 2
Record.FieldCount([]) // 0
除了使用记录初始化语法[ ]
,记录还可以由值列表、字段名称列表或记录类型构成。例如:
复制
代码语言:javascript复制Record.FromList({1, 2}, {"a", "b"})
以上等价于:
复制
代码语言:javascript复制[ a = 1, b = 2 ]
为记录值定义了以下运算符:
操作员 | 结果 |
---|---|
x = y | 平等的 |
x <> y | 不相等 |
x & y | 合并 |
x ?? y | 合并 |
以下示例说明了上述运算符。请注意,如果字段名称重叠,记录合并使用来自右侧操作数的字段来覆盖来自左侧操作数的字段。
复制
代码语言:javascript复制[ a = 1, b = 2 ] & [ c = 3 ] // [ a = 1, b = 2, c = 3 ]
[ a = 1, b = 2 ] & [ a = 3 ] // [ a = 3, b = 2 ]
[ a = 1, b = 2 ] = [ b = 2, a = 1 ] // true
[ a = 1, b = 2, c = 3 ] <> [ a = 1, b = 2 ] // true
记录值的本机类型是内在类型record
,它指定一个开放的空字段列表。
桌子
甲表值是行的有序序列。一列是值的有序序列。表的类型决定了表中所有行的长度、表列的名称、表列的类型以及表键的结构(如果有)。
表没有文字语法。提供了几个标准库函数来构造二进制值。例如,#table
可用于从行列表列表和标题名称列表构造表:
复制
代码语言:javascript复制#table({"x", "x^2"}, {{1,1}, {2,4}, {3,9}})
上面的例子构造了一个包含两列的表,两列都是type any
。
#table
也可用于指定全表类型:
复制
代码语言:javascript复制#table(
type table [Digit = number, Name = text],
{{1,"one"}, {2,"two"}, {3,"three"}}
)
此处新表值具有指定列名和列类型的表类型。
为表值定义了以下运算符:
操作员 | 结果 |
---|---|
x = y | 平等的 |
x <> y | 不相等 |
x & y | 级联 |
x ?? y | 合并 |
表串联对齐同名列并填充null
仅出现在操作数表之一中的列。以下示例说明了表串联:
复制
代码语言:javascript复制 #table({"A","B"}, {{1,2}})
& #table({"B","C"}, {{3,4}})
一个 | 乙 | C |
---|---|---|
1 | 2 | null |
null | 3 | 4 |
表值的本机类型是自定义表类型(派生自内部类型table
),它列出列名称,将所有列类型指定为 any,并且没有键。(有关表类型的详细信息,请参阅表类型。)