lua-实现其他语言的三目运算

大家好,我是一个菜鸟程序猿。

今天突然lua打开工程 突然看看自己的同事,写了好多 if else
所以今天我就记录一下 三木运算
在其他语言中 三目运算的格式是(c语言)
变量 = 条件 ?(true)赋值语句 :(false)赋值语句

//例
int a = 0;
int b = 1;
int c = a == 0 ? b : a;
输出的是 c = 1

然而在 lua中是不存在三木运算的
(未知的)程序猿前辈 想到了用 and 和 or 模拟运算

--例1
a = 0
b = 1
c = 2
d = a == 0 and b or c

结果是 d = 1
在其他语言中 and (&&)和 or(||)是比较 true 和 false的
在lua 中 and 和 or 和其他语言是不一样的
这里讲清楚and or 后面你们就明白前辈的强大

And
--例2
a = 0 
b = 1
c = a and b

例2 c = 1
在判断的时候 a为 true 或 存在, 任意一种的时 才会执行 and b ,a 不存在 或为 false,不执行后面
在lua 中 a and b 意思的 a 存在 或者 a 不是false 的时候 会把and 后面的值赋给 c,a 如果是 false 或者是 nil 的话 会把 and 前面的值赋给c (false,nil )下面看 例3,4

--例3
a = false
b = 1
c = a and b
--c的值是 false

--例4
a = nil
b = 1
c = a and b
--c的值是 nil
Or
--例5
a = 0 
b = 1
c = a or b

例2 c = 0
在判断的时候 a为 false 或 nil 任意一种的时 才会执行 or b ,a 存在 或为 true 不执行后面
在lua 中 a or b 意思的 a 不存在 或者 a 是 false 的时候 会把 or 后面的值赋给 c,a 如果存在 或者不是 false 的话 会把or 后面的值赋给c,下面看 例6,7

--例6
a = false
b = 1
c = a or b
--c的值是 1

--例7
a = nil
b = 1
c = a or b
--c的值是 1

讲完了 and 和 or 后,我们现在讲例1
d = a == 0 and b or c
a 等于 0 的是 true 所以会返回 b 判断 b 是否存在和是否为 false, 如果 b存在 也不是false 就会 b 的值给 d
a 不等于 0 是false 会返回 c
这里会有一个 小坑
那就是 a 等于 0 则 b 不存在 或者是 false 的情况
我们 测试一下

--例8
a = 0 
--b的值是false 或者 nil 
b = false
c = 2
d = a == 0 and b or c

这种情况
d 的值 就是c 并不是 false , 并不是我们想要的结果 b的值给 d
例1 的式子 必须保证在 b 存在 并且不是false 的情况下 这个式子才能成立
A~ A~ A~ 这里要读三声
我们的强大的前辈想出个办法 or 左右的式子用表代替
大家应该知道 在lua中 不为 nil 和不是false 就是true
最终的式子是

例 究极式子
a = 0 
b = false
c = 2

d = (a == 0 and {b} or {c})[1]

本文中提到的 存在 即是 ~=nil(不是nil)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aric@Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值