13.7 逻辑表达式
XQuery主要提供了and和or两个逻辑运算符。对于and运算符而言,只有当前后两个操作数都是true时,逻辑表达式才返回true;而对于or运算符而言,只要前后两个操作数中有一个为true,逻辑表达式就返回true。
由于XQuery的and和or运算符都要求前后两个操作数是xs:boolean类型,因此XQuery在计算逻辑表达式时会先调用fn:boolean()函数将两个操作数转换为xs:boolean类型的值,然后再进行逻辑运算。
例如:
1 eq 1 and 2 eq 2:返回true。
1 eq 1 or 2 eq 3:返回true。
由于XQuery没有强制指定and和or是否会短路,因此不同的XQuery实现有不同的处理方式,有的XQuery实现对and和or会短路,有的XQuery实现则对and和or不会短路。
提示
学过Java编程的读者对短路应该有认识。所谓短路and指的是,如果and运算符前一个操作数已经是false,则该逻辑表达式将直接返回false,而不会去计算第二个操作数的值。所谓短路or指的是,如果or运算符前一个操作数已经是true,则该逻辑表达式将直接返回true,而不会去计算第二个操作数的值。
例如:
1 eq 2 and 3 idiv 0=1:如果XQuery实现支持短路则返回false,否则将引发动态错误。 1 eq 1 or 3 idiv 0=1:如果XQuery实现支持短路则返回true,否则将引发动态错误。1 eq 1 and 3 idiv 0=1:总是会引发动态错误。