2011-04-02 13 views

cevap

78

Sure: tabii

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

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

: a and t or f sizin için işe yaramazsa, her zaman sadece bir fonksiyon oluşturabilir

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

+1. Ancak bunun kesinlikle doğru olduğunu sanmıyorum - LUA kullanmıyorum - ama bence bu yaklaşımla diğer dillerde üçüz bir operatör üzerinde bir "kusur" paylaşıyor. Düşünün: '(cond ve false-value ya da x)' Bu, her durumda x' ile sonuçlanacaktır. –

+1

aynı zamanda A'nın değerini de basmaz mı? – corsiKa

+7

@glowcoder No. "Bağımlı işleç (ve), bu değer false veya nil ise, ilk argümanını döndürür, aksi takdirde ikinci argümanını döndürür.Yıkama operatörü (veya), bu değer nil'den farklıysa ilk argümanını döndürür ve yanlış, aksi takdirde, veya ikinci argümanını döndürür.Kısa ve/veya kısa yol değerlendirme kullanın, yani, ikinci işlenen sadece gerekli ise değerlendirilir - - http://www.lua.org/manual/5.0/manual .html –

13

, o zaman geri çekilip T ve F her zaman değerlendirilir .... o etrafında olsun ou sizin üçlü işlevine işlevleri sağlamak gerekir ve bu hantal alabilirsiniz:

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

Bence boolean değişkenleri için en yararlı olanı budur – Vyacheslav

+0

Bu cevap aslında en iyi yanıttan daha iyi çünkü boole de çalışıyor. –

10

birlikte sorun açıklama ve birkaç çözümlerle, üçlü operatör hakkında lua-users wiki güzel bir makale vardır. Yanıt için