该字段存取表达用于选择从记录中的值或将投射一个记录或表一个具有更少的字段或列,分别。
字段访问表达式:
字段选择
隐式目标字段选择
投影
隐式目标投影
字段选择:
主表达式字段选择器
字段选择器:
必需字段选择器
可选字段选择器
必需字段-选择器:
[
字段名称 ]
可选字段选择器:
[
字段名称 ] ?
字段名称:
通用标识符
引用标识符
隐式目标字段选择:
字段选择器
投影:
主表达式必需投影
主表达式可选投影
required-projection:
[
required-selector-list ]
optional-projection:
[
required-selector-list ] ?
required-selector-list:
required-field-selector
required-selector-list ,
required-field-selector
hidden-target-projection:
required-projection
optional-投影
最简单的字段访问形式是required field selection。它使用运算符x[y]
按字段名称在记录中查找字段。如果该字段y
在 中不存在x
,则会引发错误。该表单x[y]?
用于执行可选字段选择,null
如果请求的字段在记录中不存在,则返回。
例如:
复制
[A=1,B=2][B] // 2
[A=1,B=2][C] // error
[A=1,B=2][C]? // null
运营商支持对多个字段的集体访问,用于必需的记录投影和可选的记录投影。操作员x[[y1],[y2],...]
将记录投影到具有较少字段的新记录(由y1
、y2
、选择...
)。如果所选字段不存在,则会引发错误。操作员x[[y1],[y2],...]
将记录投影到具有由y1
、y2
、选择的字段的新记录...
;如果缺少字段,null
则改为使用。例如:
复制
[A=1,B=2][[B]] // [B=2]
[A=1,B=2][[C]] // error
[A=1,B=2][[B],[C]]? // [B=2,C=null]
形式[y]
和[y]?
支持作为标识符(下划线)的速记引用_
。下面两个表达式是等价的:
复制
[A]
_[A]
以下示例说明了字段访问的简写形式:
复制
let _ = [A=1,B=2] in [A] //1
形式[[y1],[y2],...]
and[[y1],[y2],...]?
也支持作为简写,以下两个表达式同样等效:
复制
[[A],[B]]
_[[A],[B]]
速记形式与each
速记结合使用特别有用,这是一种引入名为单个参数的函数的方法_
(有关详细信息,请参阅简化声明。这两个速记一起简化了常见的高阶函数表达式:
复制
List.Select( {[a=1, b=1], [a=2, b=4]}, each [a] = [b])
// {[a=1, b=1]}
上面的表达式等效于以下看起来更神秘的普通文字:
复制
List.Select( {[a=1, b=1], [a=2, b=4]}, (_) => _[a] = _[b])
// {[a=1, b=1]}
字段访问不会强制对正在访问的字段以外的字段进行评估。例如:
复制
[A=error "a", B=1, C=error "c"][B] // 1
[A=error "a", B=error "b"][B] // error "b"
当对字段访问运算符x[y]
, x[y]?
, x[[y]]
, orx[[y]]?
求值时,以下内容成立:
x
被传播。y
与 field 永久关联y
,然后传播。以后对字段的任何访问y
都会引发相同的错误。x
产生一个记录或表值,或引发错误。y
命名的字段在 中不存在x
,"Expression.Error"
则会引发带有原因代码的错误,除非使用可选运算符形式...?
,在这种情况下null
返回值。无场x
比由名为其他y
领域访问的过程中被评估。
使用元运算符( x meta y
)修改值的元数据记录。
元数据表达式:
一元表达式
一元表达式 meta
一元表达式
以下示例使用meta
运算符构造带有元数据记录的文本值,然后使用 访问结果值的元数据记录Value.Metadata
:
复制
Value.Metadata( "Mozart" meta [ Rating = 5 ] )
// [Rating = 5 ]
Value.Metadata( "Mozart" meta [ Rating = 5 ] )[Rating]
// 5
应用元数据组合运算符时,以下内容成立x meta y
:
x
ory
表达式时引发的错误。y
表达式必须是一个记录,或者用原因代码的误差"Expression.Error"
上升。x
与 合并的元数据记录y
。(有关记录合并的语义,请参阅记录合并。)x
表达式中的值,不带元数据,附加新计算的元数据记录。标准库函数Value.RemoveMetadata
和Value.ReplaceMetadata
可用于从一个值中删除所有元数据和替换值的元数据(而不是合并入元数据可能存在的元数据)。以下表达式是等效的:
复制
x meta y
Value.ReplaceMetadata(x, Value.Metadata(x) & y)
Value.RemoveMetadata(x) meta (Value.Metadata(x) & y)
的相等运算 =
被用于确定如果两个值是相等的。该不等式操作者 <>
用于确定如果两个值不相等。
等式表达式:
关系表达式
关系表达式 =
等式表达式
关系表达式 <>
等式表达式
例如:
复制
1 = 1 // true
1 = 2 // false
1 <> 1 // false
1 <> 2 // true
null = true // false
null = null // true
元数据不是平等或不平等比较的一部分。例如:
复制
(1 meta [ a = 1 ]) = (1 meta [ a = 2 ]) // true
(1 meta [ a = 1 ]) = 1 // true
应用等式运算符x = y
and时,以下内容成立x <> y
:
x
ory
表达式时引发的错误。=
运营商具有的结果true
,如果这两个值相等,并false
以其他方式。<>
运营商具有的结果false
,如果这两个值相等,并true
以其他方式。x
和y
表达式求值而产生的值不是同一种值,则这些值不相等。x
和y
表达式求值所产生的值是同一种值,则有特定的规则来确定它们是否相等,如下所定义。复制
(x = y) = not (x <> y)
为以下类型定义了相等运算符:
null
值仅等于自身。复制
null = null // true
null = true // false
null = false // false
true
和false
只等于它们自己。例如:复制
true = true // true
false = false // true
true = false // false
true = 1 // false
#nan
,则数字不相同。#nan
,则使用数值的按位比较来比较这些数字。#nan
是唯一不等于自身的值。
例如:复制
1 = 1, // true
1.0 = 1 // true
2 = 1 // false
#nan = #nan // false
#nan <> #nan // true
复制
{1, 2} = {1, 2} // true
{2, 1} = {1, 2} // false
{1, 2, 3} = {1, 2} // false
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。