XQuery-简明扼要,相当于;设$a:=foo();如果是($a),那么是$a,否则';默认值'&引用;

XQuery-简明扼要,相当于;设$a:=foo();如果是($a),那么是$a,否则';默认值'&引用;,xquery,Xquery,在Python中,使用几个候选项的第一个“truthy”值可以写成以下形式: result = a or b or c …在处理函数调用的结果时,避免了重复或变量赋值的需要: result = get-candidate() or get-default() XQuery中是否有简洁、高效、可读的等价物 我能想到的最好方法(不依赖引擎将对get-candidate()的多个调用优化到一个,如果它执行类似于外部HTTP或SQL事务的操作,这可能根本不可能)类似于以下内容: let $a :=

在Python中,使用几个候选项的第一个“truthy”值可以写成以下形式:

result = a or b or c
…在处理函数调用的结果时,避免了重复或变量赋值的需要:

result = get-candidate() or get-default()
XQuery中是否有简洁、高效、可读的等价物

我能想到的最好方法(不依赖引擎将对
get-candidate()
的多个调用优化到一个,如果它执行类似于外部HTTP或SQL事务的操作,这可能根本不可能)类似于以下内容:

let $a := get-candidate()
return if($a) then $a else get-default()
…特别是如果这被重复了很多次,那就不太好看了


最好的简洁易读的方法是什么?

如果您的候选人是单个项目或空序列,您可以使用以下符号:


(get-candidate(),get-default())[1]


否则,您可能必须坚持使用冗长的表示。

谢谢,克里斯蒂安!如果
get-candidate()
返回一个结果,那么这是否会缩短对
get-default()
的调用?我实际上认为这取决于描述的实现,规范允许惰性(因此会缩短)和急切的评估策略。在BaseX中,构造当前是惰性计算的,因此不会调用
get-default()