Czy mimo to istnieje możliwość korzystania z warunków liniowych w Lua?Warunki liniowe w Lua (a == b? "Tak": "nie")?
Takich jak:
print("blah: " .. (a == true ? "blah" : "nahblah"))
Czy mimo to istnieje możliwość korzystania z warunków liniowych w Lua?Warunki liniowe w Lua (a == b? "Tak": "nie")?
Takich jak:
print("blah: " .. (a == true ? "blah" : "nahblah"))
pewne:
print("blah: " .. (a and "blah" or "nahblah"))
Jeśli a and t or f
nie działa dla Ciebie, zawsze można po prostu stworzyć 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 odwrotność, że T i F są zawsze oceniane ... żeby obejść to ou muszą zapewniać funkcje do potrójnego funkcji, a które mogą dostać nieporęczny:
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))
Myślę, że jest to najbardziej przydatne dla zmiennych boolean. – Vyacheslav
Ta odpowiedź jest w rzeczywistości lepsza niż najwyższa odpowiedź, ponieważ działa również dla zmiennych logicznych. –
Jest ładny artykuł o lua-users wiki o operatora potrójnego, wraz z wyjaśnieniem problemu i kilka rozwiązań.
+1 za odpowiedź. Jednak nie sądzę, że jest to ściśle prawdą - nie używam LUA - ale myślę, że ma ona "wadę" z takim podejściem do operatora trójskładnikowego w innych językach. Wyobraź sobie: '(cond i false-value lub x)' To spowoduje, że 'x' we wszystkich przypadkach. –
czy to też nie wydrukuje wartości A? – corsiKa
@glowcoder No. "Operator koniunkcji (i) zwraca pierwszy argument, jeśli ta wartość jest równa false lub zero, w przeciwnym razie zwraca drugi argument.Orientator (lub) zwraca pierwszy argument, jeśli ta wartość jest różna od zera i false, w przeciwnym razie lub zwraca drugi argument: zarówno i jak i użyj skrótu ewaluacyjnego, czyli drugi argument jest oceniany tylko w razie potrzeby "- z http://www.lua.org/manual/5.0/manual .html –