(a and b) or c
local value = (a and b) or c
- a 为条件语句 true或者false
- 当a为true则把b赋给value,当a为false则把c赋给value
↑如果逻辑运算符没弄清楚的先看如上地址
逻辑拆分
(a and b) or c
--以上逻辑可以拆分以下结果
假定 b c 不为nil
当a 是true 则(a and b) 返回b
然后 判断 b or c
b 和 c 都是要赋的值,理论上是不应该空的。
--如果b为true,则返回b,否则返回c
b or c => return b
当a是false
(a and b) => a
再判断 a or c
a又是false
--如果a为true,则返回a,否则返回c
a or c => return c
假如 b c都是nil
当a 是true 则(a and b) 返回b
然后 判断 b or c
b 和 c 都是nil => false
--如果b为true,则返回b,否则返回c
b or c => return c
当a是false
(a and b) => a
再判断 a or c
a又是false
--如果a为true,则返回a,否则返回c
a or c => return c
当b或者c为空的情况会有bug
如何避免?
可以自定义一个函数
function GetTernaryValue( ... )
local bool = select(1, ...)
local arg1 = select(2, ...)
local arg2 = select(3, ...)
if bool then
return arg1
else
return arg2
end
end
local value = GetTernaryValue(false,2,4)
print(value)