2011-04-02 19 views

Odpowiedz

78

pewne:

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

+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. –

+1

czy to też nie wydrukuje wartości A? – corsiKa

+7

@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 –

13

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)) 
+0

Myślę, że jest to najbardziej przydatne dla zmiennych boolean. – Vyacheslav

+0

Ta odpowiedź jest w rzeczywistości lepsza niż najwyższa odpowiedź, ponieważ działa również dla zmiennych logicznych. –

10

Jest ładny artykuł o lua-users wiki o operatora potrójnego, wraz z wyjaśnieniem problemu i kilka rozwiązań.