lua中的三目運算子

2022-09-13 13:09:11 字數 1821 閱讀 3214

開頭先說結論

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 = 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  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,就把...