0X26条件表达式
前置知识
正文
- 考虑如下的情景:
>
>if a>10 then
> b=1
>else
> b=0
>end
>
这个句子的意思很简单,但是却写了一大串.它就是视逻辑表达式a>0的取值不同,赋予变量b不同的值.有没有办法把它写得更简便一些呢?
- 在C等语言中提供了所谓的三目运算,条件表达式.上述的问题在C语言中可以用这个表达式解决:
>
>b=(a>10)?1:0;
>
- Lua没有提供专门的三目算符.但是这并不意味着Lua中不能使用条件表达式.
- 首先我们需要回顾一下逻辑值相关的内容.Lua事实上在逻辑运算中把所有值分为了三类:
- nil
- false
- true和其他类型的值(包括0,空字符串,空列表)
- not运算把nil或false变成true.而把其他值全变成false.
>
>not nil
>not false
>not 0
>not {}
>
- and会先判断其左侧的值,如果它是nil或者false就返回它.否则返回右侧的值.
>
>nil and true
>false and true
>0 and 1
>1 and 0
>
- or也先判断其左侧的值.如果它不是nil,也不是false就返回它.否则返回右侧的值.
>
>1 or 0
>0 or 1
>nil or true
>nil or false
>false or nil
>true or 1
>
- 综合使用and和or就能达到条件表达式的效果(这里假设a是一个逻辑值,b1和b2都不是nil,也不是逻辑值):
>
>a and b1 or b2
>
当a为true时,and返回为b1,进而or运算返回b1.
当a为false时,and返回a.又由于a是false,or运算会返回b2.
- 注意如果b1,b2是nil或者逻辑值,则有可能不会按照条件表达式的规则返回.例如:
>
>true and nil or 1
>
- 演示: 条件表达式
<>!!!!!!!!!!!!!!!!!!!!!!!
后续推荐