除法运算符 ( x / y)的解释取决于求值表达式x和的值类型y,如下所示:
X | 是 | 结果 | 解释 |
|---|---|---|---|
type number | type number | type number | 数商 |
type number | null | null | |
null | type number | null | |
type duration | type number | type duration | 持续时间的分数 |
type duration | type duration | type duration | 持续时间的数商 |
type duration | null | null | |
null | type duration | null | |
对于表中所列值以外的其他值组合,将"Expression.Error"引发带有原因代码的错误。以下各节介绍了每种组合。
传播评估任一操作数时引发的错误。
数商
使用除法运算符计算两个数字的商,产生一个数字。例如:
复制
代码语言:javascript复制8 / 2 // 4
8 / 0 // #infinity
0 / 0 // #nan
0 / null // null
#nan / #infinity // #nan/数字上的除法运算符使用双精度;标准库函数Value.Divide可用于指定小数精度。计算数字的商时,以下内容成立:
- 双精度中的商是根据 64 位二进制双精度 IEEE 754 算术IEEE 754-2008的规则计算的。下表列出了非零有限值、零、无穷大和 NaN 的所有可能组合的结果。在表中,
x和y是正的有限值。z是 的结果x / y。如果结果对于目标类型来说太大,z则为无穷大。如果结果对于目标类型来说太小,z则为零。 表 13/ y-y 0-0 ∞-∞NaN x z-z ∞-∞ 0-0NaN-X-z z-∞ ∞-0 0NaN 0 0-0NaNNaN 0-0NaN-0-0 0NaNNaN-0 0NaN ∞ ∞-∞ ∞-∞NaNNaNNaN-∞-∞ ∞-∞ ∞NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN - Decimal Precision 中的总和是在不损失精度的情况下计算的。结果的标度是两个操作数的标度中较大的一个。
持续时间的商
两个持续时间的商是代表持续时间所代表的100纳秒滴答数的商的数字。例如:
复制
代码语言:javascript复制#duration(2,0,0,0) / #duration(0,1,30,0)
// 32缩放持续时间
持续时间x和数字y的商是持续时间代表的持续时间和数字所代表的 100 纳秒滴答x数的商y。例如:
复制
代码语言:javascript复制#duration(2,0,0,0) / 32
// #duration(0,1,30,0)结构组合
组合运算符 ( x & y) 定义在以下类型的值上:
X | 是 | 结果 | 解释 |
|---|---|---|---|
type text | type text | type text | 级联 |
type text | null | null | |
null | type text | null | |
type date | type time | type datetime | 合并 |
type date | null | null | |
null | type time | null | |
type list | type list | type list | 级联 |
type record | type record | type record | 合并 |
type table | type table | type table | 级联 |
级联
可以使用 连接两个文本、两个列表或两个表值x & y。
以下示例说明了连接文本值:
复制
代码语言:javascript复制"AB" & "CDE" // "ABCDE"以下示例说明了连接列表:
复制
代码语言:javascript复制{1, 2} & {3} // {1, 2, 3}使用 连接两个值时,以下内容成立x & y:
- 传播计算
xory表达式时引发的错误。 - 如果
x或的项目y包含错误,则不会传播错误。 - 连接两个文本值的结果是一个文本值,其中包含紧跟其后的 x 值。如果其中一个操作数为空而另一个为文本值,则结果为空。
- 连接两个列表的结果是一个列表,其中包含 的所有项,
x后跟 的所有项y。 - 连接两个表的结果是一个表,该表具有两个操作数表的列的并集。的列顺序
x被保留,然后是只出现在 中的列y,保留它们的相对顺序。对于仅出现在一个操作数中的列,null用于填充另一个操作数的单元格值。
合并
记录合并
可以使用 合并两条记录x & y,从而生成包含来自x和 的字段的记录y。
以下示例说明了合并记录:
复制
代码语言:javascript复制[ x = 1 ] & [ y = 2 ] // [ x = 1, y = 2 ]
[ x = 1, y = 2 ] & [ x = 3, z = 4 ] // [ x = 3, y = 2, z = 4 ]使用 合并两条记录时,以下内容成立x y:
- 传播计算
xory表达式时引发的错误。 - 如果字段同时出现在
x和 中y,y则使用值 from 。 - 结果记录中字段的顺序是
x,然后y是不属于 的字段,其x顺序与它们出现的顺序相同y。 - 合并记录不会导致对值的评估。
- 由于字段包含错误,因此不会引发错误。
- 结果是一个记录。
日期时间合并
一个日期x可以与时间合并y使用x & y,产生组合来自两个部件中的日期时间x和y。
以下示例说明了合并日期和时间:
复制
代码语言:javascript复制#date(2013,02,26) & #time(09,17,00)
// #datetime(2013,02,26,09,17,00)使用 合并两条记录时,以下内容成立x y:
- 传播计算
xory表达式时引发的错误。 - 结果是日期时间。
一元运算符
的 ,-和not运营商一元运算符。
一元表达式:
类型表达式
一元表达式
- 一元表达式
not 一元表达式
一元加运算符
一元加运算符 ( x) 是为以下类型的值定义的:
X | 结果 | 解释 |
|---|---|---|
type number | type number | 一元加 |
type duration | type duration | 一元加 |
null | `空 | |
对于其他值,"Expression.Error"会引发带有原因代码的错误。
一元加号运算符允许将 符号应用于数字、日期时间或空值。结果是相同的值。例如:
复制
代码语言:javascript复制 - 1 // -1
1 // 1
#nan // #nan
#duration(0,1,30,0) // #duration(0,1,30,0)评估一元加运算符时,以下内容成立 x:
x传播评估时引发的错误。- 如果评估结果
x不是数字值,则会引发带有原因代码的错误"Expression.Error"。
一元减运算符
一元减号运算符 ( -x) 是为以下类型的值定义的:
X | 结果 | 解释 |
|---|---|---|
type number | type number | 否定 |
type duration | type duration | 否定 |
null | null | |
对于其他值,"Expression.Error"会引发带有原因代码的错误。
一元减号运算符用于更改数字或持续时间的符号。例如:
复制
代码语言:javascript复制- (1 1) // -2
- - 1 // 1
- - - 1 // -1
- #nan // #nan
- #infinity // -#infinity
- #duration(1,0,0,0) // #duration(-1,0,0,0)
- #duration(0,1,30,0) // #duration(0,-1,-30,0)评估一元减运算符时,以下内容成立-x:
x传播评估时引发的错误。- 如果表达式是数字,则结果是表达式中
x符号已更改的数字值。如果值为 NaN,则结果也是 NaN。
逻辑否定运算符
逻辑否定运算符 ( not) 是为以下类型的值定义的:
X | 结果 | 解释 |
|---|---|---|
type logical | type logical | 否定 |
null | null | |
此运算符计算not给定逻辑值的逻辑运算。例如:
复制
代码语言:javascript复制not true // false
not false // true
not (true and true) // false在评估逻辑否定运算符时,以下内容成立not x:
x传播评估时引发的错误。- 计算表达式 x 产生的值必须是逻辑值,否则
"Expression.Error"必须引发带有原因代码的错误。如果值为true,则结果为false。如果操作数为false,则结果为true。
结果是一个逻辑值。
类型运算符
运算符is和as称为类型运算符。
类型兼容性运算符
类型兼容性运算符x is y 是为以下类型的值定义的:
X | 是 | 结果 |
|---|---|---|
type any | 可空原始类型 | type logical |
表达式x is y返回true如果的冲高类型x可兼容y,并返回false如果满足冲高类型x是不兼容的y。y必须是可空原始类型。
is-expression:
as-expression
is-expression is nullable-primitive-type
nullable-primitive-type:
nullableoptprimitive -type
is运算符支持的类型兼容性是通用类型兼容性的子集,并使用以下规则定义:
- 如果
x为 null 则它是兼容的,如果 y 是可空类型或 typeany。 - 如果
x为非空,则如果 的原始类型x与 相同,则它是兼容的y。
评估表达式时,以下内容成立x is y:
x传播评估表达式时引发的错误。
类型断言运算符
类型断言运算符x as y是为以下类型的值定义的:
X | 是 | 结果 |
|---|---|---|
type any | 可空原始类型 | type any |
表达x as y断言的值x是兼容y具体根据is操作者。如果不兼容,则会引发错误。y必须是nullable-primitive-type。
as-expression:
等式表达式
as-expression as nullable-primitive-type
表达式x as y计算如下:
x is y执行类型兼容性检查,x如果该测试成功,则断言返回不变。- 如果兼容性检查失败,
"Expression.Error"则会引发带有原因代码的错误。
例子:
复制
代码语言:javascript复制1 as number // 1
"A" as number // error
null as nullable number // null评估表达式时,以下内容成立x as y:
x传播评估表达式时引发的错误。


