Types XQuery:为什么两者都有;()=()”;及;()等式()”;评估为假?

Types XQuery:为什么两者都有;()=()”;及;()等式()”;评估为假?,types,boolean,xquery,Types,Boolean,Xquery,以下XQuery代码段: let $x := () return if (not($x eq $x) and not($x = $x)) then "wat" else "makes sense" 返回wat。为什么?空序列的值应该是false,但是false()eq false()和false()=false()都计算为true。请参见eq之类的值比较运算符,它说:“如果原子化操作数是空序列,则值比较的结果是空序列”. 因此,()eq()计算为(),然后不(())计算为真()

以下XQuery代码段:

let $x := ()
return if (not($x eq $x) and not($x = $x))
    then "wat"
    else "makes sense"

返回
wat
。为什么?空序列的值应该是
false
,但是
false()eq false()
false()=false()
都计算为
true

请参见
eq
之类的值比较运算符,它说:“如果原子化操作数是空序列,则值比较的结果是空序列”. 因此,
()eq()
计算为
()
,然后
不(())
计算为
真()。由于序列上的
=
运算符隐式地是一个存在运算符(“序列中存在两个元素,如…”),因此在空序列上调用该运算符返回true是有意义的,无论通用运算符是什么。