值是通过计算表达式产生的数据。本节介绍 M 语言中值的种类。每种值都与文字语法、一组该类型的值、一组定义在该组值上的运算符以及归属于新构造值的内在类型相关联。
种类 | 文字 |
---|---|
空值 | null |
逻辑的 | true false |
数字 | 0 1 -1 1.5 2.3e-5 |
时间 | #time(09,15,00) |
日期 | #date(2013,02,26) |
约会时间 | #datetime(2013,02,26, 09,15,00) |
日期时区 | #datetimezone(2013,02,26, 09,15,00, 09,00) |
期间 | #duration(0,1,30,0) |
文本 | "hello" |
二进制 | #binary("AQID") |
列表 | {1, 2, 3} |
记录 | [ A = 1, B = 2 ] |
桌子 | #table({"X","Y"},{{0,1},{1,0}}) |
功能 | (x) => x 1 |
类型 | type { number } type table [ A = any, B = text ] |
以下部分详细介绍了每种值类型。类型和类型归属在Types 中正式定义。函数值在Functions中定义。以下部分列出了为每种值类型定义的运算符并给出了示例。运算符语义的完整定义在Operators 中。
空值
甲空值被用来表示不存在的值,或不确定的或未知状态的值。使用文字写入空值null
。为空值定义了以下运算符:
操作员 | 结果 |
---|---|
x > y | 比...更棒 |
x >= y | 大于或等于 |
x < y | 少于 |
x <= y | 小于或等于 |
x = y | 平等的 |
x <> y | 不相等 |
x ?? y | 合并 |
值的本机类型null
是内在类型null
。
逻辑的
一逻辑值,用于布尔运算的值为true或false。使用文字true
和写入逻辑值false
。为逻辑值定义了以下运算符:
操作员 | 结果 |
---|---|
x > y | 比...更棒 |
x >= y | 大于或等于 |
x < y | 少于 |
x <= y | 小于或等于 |
x = y | 平等的 |
x <> y | 不相等 |
x or y | 条件逻辑或 |
x ?? y | 合并 |
x and y | 条件逻辑与 |
not x | 逻辑非 |
两个逻辑值(true
和false
)的本机类型是内在类型logical
。
数字
一个数值,用于数字和算术运算。以下是数字文字的示例:
复制
代码语言:javascript复制3.14 // Fractional number
-1.5 // Fractional number
1.0e3 // Fractional number with exponent
123 // Whole number
1e3 // Whole number with exponent
0xff // Whole number in hex (255)
数字至少以Double的精度表示(但可以保留更高的精度)。的双表示法是全等与IEEE 64位双精度标准在[IEEE 754-2008]中定义的二进制浮点运算。(Double表示具有从 5.0 x 10 324到 1.7 x 10 308的近似动态范围,精度为 15-16 位。)
以下特殊值也被视为数字值:
- 正零和负零。在大多数情况下,正零和负零的行为与简单值零相同,但某些操作会区分这两者。
- 正无穷大(
#infinity
)和负无穷大(-#infinity
)。无穷大是由非零数除以零这样的操作产生的。例如,1.0 / 0.0
产生正无穷大,-1.0 / 0.0
产生负无穷大。 - 该不是非数字值(
#nan
),常缩写为NaN。NaN 是由无效的浮点运算产生的,例如将零除以零。
使用Precision执行二进制数学运算。精度决定了操作数四舍五入的域和执行操作的域。如果没有明确指定的精度,则使用Double Precision执行此类操作。
- 如果数学运算的结果对于目标格式来说太小,则运算结果将变为正零或负零。
- 如果数学运算的结果对于目标格式来说太大,则运算结果将变为正无穷大或负无穷大。
- 如果数学运算无效,则运算结果变为 NaN。
- 如果浮点运算的一个或两个操作数为 NaN,则运算结果变为 NaN。
为数值定义了以下运算符:
操作员 | 结果 |
---|---|
x > y | 比...更棒 |
x >= y | 大于或等于 |
x < y | 少于 |
x <= y | 小于或等于 |
x = y | 平等的 |
x <> y | 不相等 |
x y | 和 |
x - y | 不同之处 |
x * y | 产品 |
x / y | 商 |
x ?? y | 合并 |
x | 一元加 |
-x | 否定 |
数值的本机类型是固有类型number
。
时间
一时间值存储的当日时间的不透明表示。时间被编码为自午夜以来的滴答数,它计算 24 小时制中经过的 100 纳秒滴答数。自午夜以来的最大滴答数对应于 23:59:59.9999999 小时。
时间值可以使用 #time 内在构造。
复制
代码语言:javascript复制#time(hour, minute, second)
必须满足以下条件或引发带有原因代码的错误Expression.Error
:
0 ≤ 小时 ≤ 24 0 ≤ 分钟 ≤ 59 0 ≤ 秒 ≤ 59
此外,如果小时 = 24,则分和秒必须为零。
为时间值定义了以下运算符:
操作员 | 结果 |
---|---|
x = y | 平等的 |
x <> y | 不相等 |
x >= y | 大于或等于 |
x > y | 比...更棒 |
x < y | 少于 |
x <= y | 小于或等于 |
x ?? y | 合并 |
以下运算符允许其一个或两个操作数为日期:
操作员 | 左操作数 | 右操作数 | 意义 |
---|---|---|---|
x y | time | duration | 按持续时间偏移的日期 |
x y | duration | time | 按持续时间偏移的日期 |
x - y | time | duration | 按否定持续时间偏移的日期 |
x - y | time | time | 日期之间的持续时间 |
x & y | date | time | 合并日期时间 |
时间值的本机类型是内在类型time
。