มีการใช้เงื่อนไขแบบอินไลน์ใน Lua หรือไม่?
เช่น:
print("blah: " .. (a == true ? "blah" : "nahblah"))
มีการใช้เงื่อนไขแบบอินไลน์ใน Lua หรือไม่?
เช่น:
print("blah: " .. (a == true ? "blah" : "nahblah"))
คำตอบ:
แน่นอน:
print("blah: " .. (a and "blah" or "nahblah"))
(cond and false-value or x)
นั่นจะส่งผลx
ในทุกกรณี
a and false or true
จะไม่ให้คำตอบเดียวกับnot a
. สำนวนนี้มักจะใช้สำหรับกรณีที่ค่าที่ต้องการถ้าa
เป็นจริงไม่สามารถหรือfalse
nil
a and assert(b) or c
หากคุณกำลังใช้รูปแบบนี้กับตัวแปรที่คุณอาจคิดว่าตัวแปรที่สองคือไม่ใช่เท็จซึ่งหมายความว่าคุณควรจะเขียน
หากa and t or f
ไม่ได้ผลสำหรับคุณคุณสามารถสร้างฟังก์ชันได้ตลอดเวลา:
function ternary ( cond , T , F )
if cond then return T else return F end
end
print("blah: " .. ternary(a == true ,"blah" ,"nahblah"))
แน่นอนว่าคุณมีข้อเสียกลับมาว่า T และ F ได้รับการประเมินเสมอ .... ในการหลีกเลี่ยงสิ่งที่คุณต้องจัดเตรียมฟังก์ชันให้กับฟังก์ชัน ternary ของคุณและอาจทำให้เกิดความไม่สะดวก:
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
nil