2011-04-02 9 views

Trả lời

78

chắc:

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

+1 cho câu trả lời. Tuy nhiên tôi không nghĩ rằng điều này là đúng sự thật - Tôi không sử dụng LUA - nhưng tôi nghĩ rằng nó chia sẻ một "lỗ hổng" với cách tiếp cận này trên một toán tử bậc ba trong các ngôn ngữ khác. Hãy tưởng tượng: '(cond và false-value hoặc x)' Điều đó sẽ dẫn đến 'x' trong mọi trường hợp. –

+1

cũng không phải là cũng in giá trị của A không? – corsiKa

+7

@glowcoder No. "Toán tử kết hợp (và) trả về đối số đầu tiên của nó nếu giá trị này là false hoặc nil; ngược lại, và trả về đối số thứ hai của nó. sai, nếu không, hoặc trả về đối số thứ hai của nó. Cả hai và và hoặc sử dụng đánh giá cắt ngắn, nghĩa là toán hạng thứ hai được đánh giá chỉ khi cần thiết "- từ http://www.lua.org/manual/5.0/manual .html –

13

Nếu a and t or f không làm việc cho bạn, bạn có thể luôn luôn chỉ cần tạo một hàm:

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

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

tất nhiên , sau đó bạn có vẽ lại rằng T và F luôn được đánh giá .... để có được xung quanh rằng y ou cần phải cung cấp các chức năng để chức năng ternary của bạn, và điều đó có thể nhận được trở nên cồng kềnh:

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

Tôi nghĩ rằng đây là hữu ích nhất cho các biến boolean – Vyacheslav

+0

Câu trả lời này thực sự tốt hơn câu trả lời hàng đầu bởi vì nó cũng làm việc cho các boolean. –

10

Có một bài viết tốt đẹp trên lua-users wiki về hành ternary, cùng với vấn đề giải thích và một số giải pháp.