XQuery:为什么"()=()"和"()eq()"评估为false?

Ted*_*Ted 3 xquery types boolean

以下XQuery代码段:

let $x := ()
return if (not($x eq $x) and not($x = $x))
    then "wat"
    else "makes sense"
Run Code Online (Sandbox Code Playgroud)

回报wat.为什么?在有效的布尔值,空序列的应该是false,但都false() eq false()false() = false()评估,以true...

Mar*_*nen 5

有关值比较运算符,请参阅https://www.w3.org/TR/xquery-31/#id-comparisonseq,它说:"如果雾化操作数是空序列,则值比较的结果为空序列".因此,() eq ()计算结果为(),然后not(())true().

  • 啊,的确如此.并且由于序列上的`=`运算符隐式地是存在运算符("序列中存在两个元素,例如......"),因此无论一般运算符是什么,在空序列上调用它都是有意义的. (2认同)