• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Lua的三目运算符

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Lua的三目运算符

前言

刚学习lua不久,以前我写C或C++代码的时候,经常会用到三目运算符,形如:
a ? b : c;即a为真,表达式值为b,否则表达式值为c。
但是最近在用lua写逻辑时,突然发现不会使用lua的三目运算符,写if - else又很麻烦,代码量又很多,不够整洁。所以,有必要学习一下lua中的三目运算符。

基础知识

Lua语言中的逻辑运算符有and、or和not。
所有的逻辑运算符将 false 或 nil 视为假,而将除此之外的任何东西视为真。
对于and运算符,如果第一个条件为假,则返回第一个操作数,否则返回第二个操作数
对于or运算符,如果第一个条件为真,则返回第一个操作数,否则返回第二个操作数
(注意:无论第二个操作数是什么,都返回第二个操作数,这和其他有些语言返回false有区别)=Lua原生的语义并没有实现三目运算,一般是通过逻辑运算符and和or来模拟三目运算符的。

Lua的经典书籍《Lua程序设计》中提到:and和or都是用“短路求值(short_cur evaluation)”,也就是说,它们只会在需要时才会去判断第二个操作数。
短路求值可以确保像(type(tab) == “table” and tab[“msg”] == value)这样的表达式不会导致运行错误。
“短路求值”可以保证在 tab不是table的情况,不会判断 tab[“msg”] == value的值而直接返回false。

实现

按照三目运算符的规则,lua的三目运算符可以写成: a and b or c

  • b = true
    • a = true
      • a and b ——true
      • b or c —— b
    • a = false
      • a and b —— false
      • b or c —— c
  • b = false
    • a = true
      • a and b —— false
      • b or c —— c
    • a = false
      • a and b —— false
      • b or c —— c

这样就会导致,当b为false时,三目运算符是无效的。

那么怎样才能保证b的值一直为真呢?实际的程序逻辑中是允许b为false或者nil的!
我在网上查资料,从大佬那里学到一个技巧,那就是:
b表达式的外边包装一层table,写成{b}的形式,返回时再写成{b}[1]的形式就可以,那么整体的表达式就变成:(a and {b} or {c})[1]
这样就满足第二个表达式恒为真的前提。

用法

当程序员编码时候确认b为真,那么就用a and b or c,简单粗暴。
不确定b是否为真时,使用 (a and {b} or {c})[1] ,逻辑严谨。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua协程-测试2发布时间:2022-07-22
下一篇:
LUA发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap