在XQuery中,
("foo", "bar") = ("foo", "bar")
产生值true
。这似乎很明显。但我注意到了
("foo", "bar") != ("foo", "bar")
还会产生true
,我觉得这很令人惊讶。我知道我可以用=
否定not($x = $y)
并且我注意到=
具有某种集合交集语义,但任何人都可以解释!=
的语义,并且/或提供参考?
答案 0 :(得分:4)
XQuery =
和!=
是存在运算符。如果左侧集合中的任何元素与右侧集合中的任何元素一起为此运算符返回true,则它们将产生true(因此=
实际上具有相同的语义, !=
,>
,... - 所有没有字母字符的比较运算符。)
("foo", "bar") != ("foo", "bar")
右边的“foo”在右侧是!=
“bar”,所以整个比较都是正确的。
您可能希望将deep-equal
用于等于比较,将其否定版本用于非等同比较,如您在问题中已提出的那样。
答案 1 :(得分:3)
这可以在documentation for XQuery下的“3.5.2一般比较”部分找到。
以下示例包含两个常规比较,两者都是 是真的。这个例子说明了=和!=的事实 运营商不是彼此的反转。
(1, 2) = (2, 3) (1, 2) != (2, 3)
在阅读推理时,它向我朗读,好像rules of Atomization应该归咎于此。如果元素是untypedAtomic,则解析器可以自由地“猜测”应该如何进行比较,这允许基于元素本身而不是任何操作符行为的操作差异。