XQuery - краткий эквивалент «let $ a: = foo (); if ($ a), то $ a else 'default'" - PullRequest
1 голос
/ 27 марта 2012

В 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 Ответ

3 голосов
/ 28 марта 2012

Если ваш кандидат будет либо отдельным элементом, либо пустой последовательностью, вы можете использовать следующие обозначения:

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

В противном случае вам, вероятно, придется придерживатьсяподробное представление.

...