现场访问
该字段存取表达用于选择从记录中的值或将投射一个记录或表一个具有更少的字段或列,分别。
字段访问表达式:
字段选择
隐式目标字段选择
投影
隐式目标投影
字段选择:
主表达式字段选择器
字段选择器:
必需字段选择器
可选字段选择器
必需字段-选择器:
[
字段名称 ]
可选字段选择器:
[
字段名称 ] ?
字段名称:
通用标识符
引用标识符
隐式目标字段选择:
字段选择器
投影:
主表达式必需投影
主表达式可选投影
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
被传播。 - 评估 field 时引发的错误
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
- 如果两个持续时间代表相同数量的 100 纳秒刻度,则它们是相等的。
- 如果两个部分(时、分、秒)的大小相等,则两个时间相等。
- 如果两个日期的部分(年、月、日)的大小相等,则两个日期相等。
- 如果两个日期时间的分量(年、月、日、时、分、秒)相等,则它们相等。
- 如果相应的 UTC 日期时间相等,则两个日期时区相等。要获得相应的 UTC 日期时间,需要从日期时区的日期时间分量中减去小时/分钟偏移量。
- 如果使用有序、区分大小写、不区分区域性的比较,则两个文本值相等,它们在相应位置具有相同的长度和相等的字符。
- 如果以下所有条件都为真,则两个列表值相等:
- 两个列表包含相同数量的项目。
- 列表中每个位置对应项的值相等。这意味着列表不仅需要包含相等的项目,而且这些项目需要具有相同的顺序。 例如:
复制
{1, 2} = {1, 2} // true
{2, 1} = {1, 2} // false
{1, 2, 3} = {1, 2} // false
- 如果以下所有条件都为真,则两条记录相等:
- 字段数相同。
- 一条记录的每个字段名称也存在于另一条记录中。
- 一条记录的每个字段的值等于另一条记录中同名字段的值。 例如:
相关文章
- Eureka服务注册与发现
- 解决ZBLOG PHP 程序无法登录后台账户问题
- ZBLOG PHP双栏图文自媒体博客适用Gohan免费主题
- DEDECMS常见文章列表调用 - 最新/头条/图片/推荐文章等
- 解释DEDECMS标签调用中limit='0,1'和limit='1,4'的含义
- Java Elasticsearch教程
- DEDECMS调用列表显示数字序号的实现方法
- 记录DEDECMS织梦CMS程序简略标题调用方式
- 设置ZBLOG新发布文章标题添加颜色 提高用户体验
- 两种控制ZBLOG PHP目录摘要部分自动截断方法
- 开源经验分享 | 如何从一名小白成为Apache Hudi Contributor
- DEDECMS调用随机文章列表代码 调节页面灵活度
- 完整织梦DedeCMS设置全站伪静态流程 减少网站文件量
- 什么是幂等性?
- 织梦DEDECMS程序调用权重TAG标签的代码
- 几种织梦DEDECMS当前位置样式记录(面包屑导航) 任意选择
- 解决织梦DedeCMS移动端内容图片居中和自适应宽度
- Hadoop常见端口号及配置文件
- Git入门教程分享
- 修改代码实现织梦DEDECMS文章图片添加标题作为ALT