美文网首页
2018-08-02

2018-08-02

作者: AbnerTan | 来源:发表于2018-08-02 23:40 被阅读0次

lua语言中使用的小技巧


  • lua语言虽然没有C/C++语言式的三目运算,但是我们可以通过它短路式的逻辑方式实现三目运算,看下面的代码:
local x = true
local y = 78
local t = x and y or "haha"
print(t)

运行结果

result.png
  • t的值为什么会是 78 而不是"haha" 或者 true呢,
  • 那如果是 x = false呢,结果又会怎样?
  • 其实出现这种结果正是由于 and 和 or的短路性质, 举个栗子: a and b, 如果a为false,那么它就不会再去判断b的结果而是直接返回false,只有当a为true的时候它才会去看后面的值. a or b的情况就是如果a不为false(lua语言中 false和nil都是false这个需要和c语言的0区别开来),它就不会去查看后面的值了直接返回a的值,否则就查看b的值.
  • 那么a and b or c,在a为非false(或者 nil)的情况下 就回去查看 b的值,此时b是有值的,所以直接返回b的值, 在a为false(或者nil)的情况下, a才会去查看c的值. 通过这种方式就实现了C/C++语言中的三目运算(a?b:c)
  • 值得注意的一点是, a and b or c 能作为三目运算的条件是,b,c都是有值的,也就是非false(或者nil)的情况下
  • 所有如果我们需要在一个变量没有值的情况下才给它赋值,有值的情况下直接使用原来的值,可以这么写:
temp = temp or {}

转载请写明出处:https://www.jianshu.com/p/e54234f34d5b

相关文章

  • 2018-08-02

    2018-08-02

  • 2018-08-13

    2018-08-02 梁新平 2018-08-02 21:26 · 字数 617 · 阅读 0 · 日记本 【月度...

  • 2018-08-02

    2018-08-02 哈利波特二代 2018-08-02 10:32 · 字数 259 · 阅读 0 · 日记本 ...

  • 用户层~内核层通信(netlink 内核层)

    layout: posttitle: netlink通信机制-内核层date: 2018-08-02 02:01:...

  • 国际冠军杯|阿森纳 VS 切尔西

    国际冠军杯/吉尼斯杯 比赛时间:2018-08-02 星期四 03:00 欧洲指数:2.84 3.90 2.27 ...

  • 忆梅☕️玉露

    小径银珠弹,裙裾芳馥染。田田迎清风,换作茶一盏。 忆梅2018-08-02

  • 读懂芯片IC的datasheet

    读懂datasheet 2018-08-02 做电子设计,难免要读datasheet,而优质的中文版可遇不可求,...

  • 2018-08-02

    2018-08-02 f红艳 事件:今天和儿子讨论十二条快乐软件,关于界限与底线。 感受:失望,惊讶,平静。 想法...

  • 欧冠杯:格拉茨风暴 VS 阿贾克斯

    欧冠杯竞彩 比赛时间:2018-08-02 星期四 02:30 欧洲指数:3.70 3.65 1.90 亚洲初数:...

  • 20180930

    往后余生,我想以自己喜欢的方式度过 流浪摄影师 关注 2018-08-02 13:33 · 字数 1127 · 阅...

网友评论

      本文标题:2018-08-02

      本文链接:https://www.haomeiwen.com/subject/smeevftx.html