XQuery - Terse相当于“let $ a:= foo(); if($ a)然后$ a else'default'”

时间:2012-03-27 19:47:04

标签: xquery

在Python中,使用几个候选人的第一个“真实”值可以写成:

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()

...特别是如果重复多次,那就不是很漂亮了。

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

1 个答案:

答案 0 :(得分:3)

如果您的候选人要么是单个项目,要么是空序列,您可以使用以下表示法:

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

否则,你可能不得不坚持使用冗长的表示法。