【问题标题】:XQuery: How come both "() = ()" and "() eq ()" evaluate to false?XQuery:为什么“()=()”和“()eq()”都评估为假?
【发布时间】:2017-11-29 10:36:55
【问题描述】:

以下 XQuery sn-p:

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

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

【问题讨论】:

    标签: types boolean xquery


    【解决方案1】:

    请参阅https://www.w3.org/TR/xquery-31/#id-comparisons 以了解像eq 这样的值比较运算符,它说:“如果原子化操作数是空序列,则值比较的结果是空序列”。所以() eq () 计算为(),然后not(()) 计算为true()

    【讨论】:

    • 啊,确实。并且由于序列上的= 运算符隐含地是一个存在运算符(“序列中存在两个元素,例如……”),因此无论通用运算符是什么,在空序列上调用它都会返回 true。跨度>
    猜你喜欢
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    相关资源
    最近更新 更多