Có cách nào để sử dụng điều kiện nội tuyến trong Lua không?Điều kiện nội tuyến trong Lua (a == b? "Yes": "no")?
Chẳng hạn như:
print("blah: " .. (a == true ? "blah" : "nahblah"))
Có cách nào để sử dụng điều kiện nội tuyến trong Lua không?Điều kiện nội tuyến trong Lua (a == b? "Yes": "no")?
Chẳng hạn như:
print("blah: " .. (a == true ? "blah" : "nahblah"))
chắc:
print("blah: " .. (a and "blah" or "nahblah"))
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))
Tôi nghĩ rằng đây là hữu ích nhất cho các biến boolean – Vyacheslav
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. –
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.
+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. –
cũng không phải là cũng in giá trị của A không? – corsiKa
@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 –