2011-04-02 10 views

Respuesta

78

Claro:

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

+1 para la respuesta. Sin embargo, no creo que esto sea estrictamente cierto, no utilizo LUA, pero creo que comparte un "defecto" con este enfoque sobre un operador ternario en otros idiomas. Imagine: '(cond y false-value o x)' Eso dará como resultado la 'x' en todos los casos. –

+1

¿no sería eso también imprimir el valor de A también? – corsiKa

+7

@glowcoder No. "El operador de conjunción (y) devuelve su primer argumento si este valor es falso o nulo; de lo contrario, y devuelve su segundo argumento. El operador de disyunción (o) devuelve su primer argumento si este valor es diferente de cero y falso, de lo contrario, o devuelve su segundo argumento. Ambos y y o usan la evaluación de acceso directo, es decir, el segundo operando se evalúa solo si es necesario "- de http://www.lua.org/manual/5.0/manual .html –

13

Si el a and t or f no funciona para usted, siempre puede crear una función:

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

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

por supuesto , entonces tienes el inconveniente de que siempre se evalúan T y F ... para evitar eso y ou necesita proporcionar funciones a su función ternaria, y que puede llegar difícil de manejar:

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

Creo que este es el más útil para las variables booleanas – Vyacheslav

+0

Esta respuesta es en realidad mejor que la respuesta superior, ya que también funciona para los booleanos. –

10

hay un buen artículo sobre lua-users wiki acerca operador ternario, junto con la explicación de problemas y varias soluciones.

Cuestiones relacionadas