Есть ли способ использовать встроенные условия в Lua?
Такие как:
print("blah: " .. (a == true ? "blah" : "nahblah"))
Ответы:
Конечно:
print("blah: " .. (a and "blah" or "nahblah"))
(cond and false-value or x)
это приведет к x
во всех случаях.
a and false or true
не даст того же ответа, что и not a
. Эта идиома обычно используется в тех случаях, когда желаемое значение if a
true не может быть false
или nil
.
a and assert(b) or c
.
Если у a and t or f
вас не работает, вы всегда можете просто создать функцию:
function ternary ( cond , T , F )
if cond then return T else return F end
end
print("blah: " .. ternary(a == true ,"blah" ,"nahblah"))
конечно, тогда у вас есть недостаток в том, что T и F всегда оцениваются ... чтобы обойти это, вам нужно предоставить функции вашей троичной функции, а это может стать громоздким:
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
есть nil
.