0X26条件表达式

前置知识

  • 0X19分段函数

正文

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

后续推荐