2011-04-02 11 views

risposta

78

Certo:

print("blah: " .. (a and "blah" or "nahblah")) 
+13

+1 per la risposta. Tuttavia, non penso che sia assolutamente vero - non uso LUA - ma penso che condivida un "difetto" con questo approccio rispetto a un operatore ternario in altre lingue. Immagina: '(cond e false-value o x)' Ciò comporterà 'x' in tutti i casi. –

+1

non dovrebbe stampare anche il valore di A? – corsiKa

+7

@glowcoder No. "L'operatore di congiunzione (e) restituisce il primo argomento se questo valore è falso o nullo, altrimenti restituisce il secondo argomento L'operatore di disgiunzione (o) restituisce il primo argomento se questo valore è diverso da zero e false, altrimenti, o restituisce il secondo argomento: entrambi ee o utilizzano la valutazione di scorciatoie, ovvero il secondo operando viene valutato solo se necessario "- da http://www.lua.org/manual/5.0/manual .html –

13

Se il a and t or f non funziona per voi, si può sempre e solo creare una funzione:

function ternary (cond , T , F) 
    if cond then return T else return F end 
end 

print("blah: " .. ternary(a == true ,"blah" ,"nahblah")) 

naturalmente , quindi hai il vantaggio che T e F sono sempre valutati ... per aggirare che y ou necessità di fornire funzioni per la vostra funzione ternario, e che può ottenere ingombrante:

function ternary (cond , T , F , ...) 
    if cond then return T(...) else return F(...) end 
end 

print("blah: " .. ternary(a == true ,function() return "blah" end ,function() return "nahblah" end)) 
+0

Penso che questo sia il più utile per le variabili booleane – Vyacheslav

+0

Questa risposta è in realtà migliore della risposta principale perché funziona anche per i booleani. –

10

C'è un bel articolo su lua-users wiki circa operatore ternario, insieme con il problema di fornire spiegazioni e diverse soluzioni.