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

逻辑操作符---Lua:and,or,not对比C++:&&,||,!

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

     lua中有三个逻辑操作符:and,or,not(逻辑与,逻辑或,逻辑非),同样c++也有类似的三个逻辑操作符:&&,||,!(逻辑与,逻辑或,逻辑非)。他们的运算对象就是真和假。lua中nil和false是属于假,true和其他任何东西都是真。c++中也有类似的东西。0,NULL和false属于假,true其他任何非空的东西都属于真。lua与c++中逻辑运算规则相似却又有所不同。

     他们都采用短路求值(short-circuit evaluation)的策略。即:逻辑与和逻辑或操作符都是先求左侧运算对象的值再求右侧运算对象的值,当且仅当左侧运算对象无法确定表达式的结果时才会计算右侧运算对象的值。这句话可以推导出很多令大家初看下比较诧异的说法。

     比如说:Lua中,and运算规则是:"如果and的第一个操作数(左操作数)是假就返回第一个操作数,如果为真就返回第二个操作数(右操作数)"。这句话其实很好理解,如果左操作数是假的,我们就不必再判断第二个操作数,直接返回假就行了,也就是左操作数。如果左操作数是真,那么我们还得看右操作数,他为真,返回值就是真,他为假,返回值就是假。对应上面的"如果为真就返回第二个操作数(右操作数)"。细心的朋友会发现,lua返回的是操作数而非操作数对应的true或false。这一点也是lua和c++的区别所在,c++的逻辑操作返回的一定是0或1。

/*c++代码*/
  std::cout<<(4&&5);        //输出是1(返回true) 
  std::cout<<(4||5);         //输出是1 (返回true)

--lua代码
 print(4 and 5);                   --输出是5 (返回数值5)
 print(4 or 5);                      --输出是4(返回数值4)

虽然在这一点上c++和lua上有所区别,但这点差异也只是让lua的逻辑操作符有了c++中三目运算符? : 的功能。比如说:

a and b or c -- 相当于a?b:c (*注意这是有前提的,前提就是b不为nil或false,即b是为真的)
max=(x>y)and x or y --这句代码可以求两者中大的一个并赋值到max

有一点不得不说,Lua中0也是为真的哦,这一点也很重要。


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
Lua的function、closure和upvalue发布时间: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