三目运算符

(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 是true 则(a and b) 返回b

然后 判断 b or c

b 和 c 都是要赋的值,理论上是不应该空的。

--如果b为true,则返回b,否则返回c

b or c => return b
  • 当a=false
当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 是true 则(a and b) 返回b

然后 判断 b or c

b 和 c 都是nil => false

--如果b为true,则返回b,否则返回c
b or c => return c
  • 当a=false
当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)

你可能感兴趣的:(三目运算符)