Семантика = и! = - PullRequest
       14

Семантика = и! =

3 голосов
/ 08 февраля 2012

В XQuery

("foo", "bar") = ("foo", "bar")

дает значение true.Это кажется очевидным.Но я заметил, что

("foo", "bar") != ("foo", "bar")

также дает true, что я нашел довольно удивительным.Я знаю, что могу отрицать = с помощью not($x = $y), и я заметил, что = имеет какую-то установленную семантику пересечения, но может ли кто-нибудь объяснить семантику != и / или предоставить ссылку на нее?

Ответы [ 2 ]

4 голосов
/ 08 февраля 2012

XQuery = и != являются экзистенциальными операторами. Они выдают значение true, если любой элемент в левом наборе вместе с любым элементом в правом наборе вернет true для этого оператора (так что фактически та же семантика для =, !=, >, ... - все операторы сравнения без букв алфавита).

("foo", "bar") != ("foo", "bar")

"foo" на левой стороне - != "bar" на правой стороне, поэтому все сравнение верно.

Возможно, вы захотите использовать deep-equal для сравнения с равными и его отрицательную версию для сравнения с не равными, как вы уже предложили в своем вопросе.

3 голосов
/ 08 февраля 2012

Это можно найти в документации для XQuery в разделе "3.5.2 Общие сравнения".

Следующий пример содержит два общих сравнения, оба из которых верны,Этот пример иллюстрирует тот факт, что операторы = и! = Не являются противоположностями друг другу.

(1, 2) = (2, 3)
(1, 2) != (2, 3)

Читая рассуждения, он читает мне, как будто правила распыления виноваты здесь.Если элементы имеют тип untypedAtomic, то синтаксический анализатор может сам «угадать», как должно выполняться сравнение, что позволяет различать операции на основе самих элементов, а не поведения оператора.

...