lua中的三⽬运算符
开头先说结论
1.简单版三⽬运算符(需要⾃我保证“b”不为“false”)
a and
b or c
2.通⽤版三⽬运算符
(a and {b} or {c})[1]
浅谈推导过程
我们⾸先需要知道lua中的以下⼏点规则
1.lua中只有“false”和“nil”视为“假”,其他任何⼀切都为“真”,包括“0”。
2.对于运算符“and”来说,假设它的第⼀个操作数为“假”,就返回第⼀个操作数;不然返回第⼆个操作数。
3.对于运算符”or”来说,假设它的第⼀个操作数为”真”。就返回第⼀个操作数,不然返回第⼆个操作数。
现在我们假设三个变量
local a = true
local b = true
local c = false
先说“and”
a and
b 返回 true(这⾥的true为b)
然后“or”
true(这⾥的true为b) or c 返回 true(这⾥的true为b)
我们再来假设三个变量
local a = false
local b = true
local c = false
先说“and”
a and
b 返回 false(这⾥的false为a)
然后“or”
false(这⾥的false为a) or c 返回 false(这⾥的false为c)
所以
ret = a and b or c
当 a 为 true 时 ret = b
当 a 为 false 时 ret = c
这⾥已经得出⼀个简单的三⽬运算符 “a and b or c”,你以为这就完了吗?
但是!
这是基于a的变化并且 b = true, c = false 的情况
我们重新再来假设三个变量
local a = true
local b = false
local c = true
先说“and”
a and
b 返回 false(这⾥的false为b)
然后“or”
三目条件运算符?:的含义
false(这⾥的false为b) or c 返回 true(这⾥的true为c)
记下这个返回值
我们叕假设三个变量
local a = false
local b = false
local c = true
先说“and”
a and
b 返回 false(这⾥的false为a)
然后“or”
false(这⾥的false为a) or c 返回 true(这⾥的true为c)
所以
ret = a and b or c
当 a 为 true 时 ret = c
当 a 为 false 时 ret = c
是不是发现问题了
⽆论a是“true”还是“false”最终返回结果都是“c”
这显然不是我们想要的结果,那么问题出在哪⾥呢?
通过上⾯拆开的步骤来看,都是出现在了第⼆次“or”运算当中
【对于运算符”or”来说,假设它的第⼀个操作数为”真”。就返回第⼀个操作数,不然返回第⼆个操作数。】因为这⼀条的存在所以只要 b = false 不论第⼀步 “and” 运算的结果如何最终 “or” 的结果都会指向C
所以我们进⼀步优化就得出以下
(a and {b} or {c})[1]
这样即使 b = false 但判断的过程中却是判断 “{false}”,就不会影响结果啦。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。