除法运算符 ( 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
:
- 传播计算
x
ory
表达式时引发的错误。 - 如果
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
:
- 传播计算
x
ory
表达式时引发的错误。 - 如果字段同时出现在
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
:
- 传播计算
x
ory
表达式时引发的错误。 - 结果是日期时间。
一元运算符
的
,-
和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:
nullable
optprimitive -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
传播评估表达式时引发的错误。