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}”,就不會影響結果啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM