Czy w Lua można używać warunków inline?
Jak na przykład:
print("blah: " .. (a == true ? "blah" : "nahblah"))
Odpowiedzi:
Pewnie:
print("blah: " .. (a and "blah" or "nahblah"))
(cond and false-value or x)
to spowoduje x
we wszystkich przypadkach.
a and false or true
nie da takiej samej odpowiedzi, jak not a
. Ten idiom jest zwykle używany w przypadkach, gdy żądana wartość, jeśli a
jest prawdziwa, nie może być false
lub nil
.
a and assert(b) or c
.
Jeśli a and t or f
to nie zadziała, zawsze możesz po prostu utworzyć funkcję:
function ternary ( cond , T , F )
if cond then return T else return F end
end
print("blah: " .. ternary(a == true ,"blah" ,"nahblah"))
oczywiście, wtedy masz tę wadę, że T i F są zawsze oceniane ... aby obejść, musisz zapewnić funkcje swojej funkcji trójskładnikowej, a to może stać się nieporęczne:
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))
t
jest nil
.