開頭先說結論
1.簡單版三目運算子(需要自我保證「b」不為「false」)
a and b or c
2.通用版三目運算子
(a and or )[1]
**推導過程
我們首先需要知道lua中的以下幾點規則
1.lua中只有「false」和「nil」視為「假」,其他任何一切都為「真」,包括「0」。
2.對於運算子「and」來說,假設它的第乙個運算元為「假」,就返回第乙個運算元;不然返回第二個運算元。
3.對於運算子」or」來說,假設它的第乙個運算元為」真」。就返回第乙個運算元,不然返回第二個運算元。
現在我們假設三個變數
local a = truelocal b = true
local c = false
先說「and」
a and b 返回 true(這裡的true為b)
然後「or」
true(這裡的true為b) or c 返回 true(這裡的true為b)
我們再來假設三個變數
local a = falselocal 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 = truelocal b = false
local c = true
先說「and」
a and b 返回 false(這裡的false為b)
然後「or」
false(這裡的false為b) or c 返回 true(這裡的true為c)
記下這個返回值
我們叕假設三個變數
local a = falselocal 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 or )[1]
這樣即使 b = false 但判斷的過程中卻是判斷 「」,就不會影響結果啦。
Lua的三目運算子
剛學習lua不久,以前我寫c或c 的時候,經常會用到三目運算子,形如 a b c 即a為真,表示式值為b,否則表示式值為c。但是最近在用lua寫邏輯時,突然發現不會使用lua的三目運算子,寫if else又很麻煩,量又很多,不夠整潔。所以,有必要學習一下lua中的三目運算子。lua語言中的邏輯運算子...
三目運算子
1 概念 根據不同的條件,執行不同的操作 返回不同的值。條件1?值1 或操作1 如果滿足條件 1,就返回值 1或執行操作1 條件2?值2 或操作2 否則,如果滿足條件 2,就返回值 2或執行操作2 總結 表示式 閏年 平年 多種條件 條件 1?值1 條件2?值 值3例子 1 輸入星期四 就輸出 班級...
三目運算子
單目運算子 3 雙目運算子 3 4 三目運算子 格式 表達關係式 表示式1 表示式2 如果條件為true,運算後的結果是表示式1 如果條件為false,運算後的結果是表示式2 比較表示式 結果是乙個boolean型別 執行流程 根據比較表示式的計算返回乙個true或者false。如果是true,就把...