2012-03-27 3 views
1

In Python kann der erste "truthy" -Wert mehrerer Kandidaten in das Formular geschrieben werden :

result = a or b or c 

..., die für die Wiederholung oder variable Zuordnung keine Notwendigkeit vermeidet, wenn mit der Funktionsaufrufe zu tun:

result = get-candidate() or get-default() 

Ist eine lapidare, performant, lesbar Äquivalent in XQuery?

Das Beste, was ich (ohne sich auf die Engine zu optimieren, mehrere Aufrufe an get-candidate() bis zu einem, die möglicherweise überhaupt nicht möglich ist, wenn es etwas wie eine externe HTTP-oder SQL-Transaktion ist), ist etwas Ähnliches die folgenden:

let $a := get-candidate() 
return if($a) then $a else get-default() 

... vor allem, wenn dies mehrmals wiederholt wird, ist es nicht sehr hübsch.

Was ist der beste knappe, lesbare Ansatz?

Antwort

3

Wenn Ihr Kandidat entweder ein einzelnes Element oder eine leere Sequenz sein, können Sie die folgende Notation verwenden:

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

Andernfalls werden Sie wahrscheinlich mit der ausführlichen Darstellung zu halten haben.

+0

Danke, Christian! Ist der Aufruf von 'get-default()' kurzgeschlossen, wenn 'get-candidate() 'ein Ergebnis liefert? –

+1

Ich denke eigentlich, dass die Entscheidung zu treffen ist, erlaubt die Spezifikation sowohl faul (und damit kurzschließen) und eifrig Evaluierungsstrategien. In BaseX wird das Konstrukt derzeit träge ausgewertet, daher wird 'get-default()' nicht aufgerufen. –