Lua的三目運算子

2021-09-22 20:04:24 字數 1143 閱讀 2313

剛學習lua不久,以前我寫c或c++**的時候,經常會用到三目運算子,形如:

a ? b : c;即a為真,表示式值為b,否則表示式值為c。

但是最近在用lua寫邏輯時,突然發現不會使用lua的三目運算子,寫if - else又很麻煩,**量又很多,不夠整潔。所以,有必要學習一下lua中的三目運算子。

lua語言中的邏輯運算子有and、or和not。

所有的邏輯運算子將 false 或 nil 視為假,而將除此之外的任何東西視為真。

對於and運算子,如果第乙個條件為假,則返回第乙個運算元,否則返回第二個運算元

對於or運算子,如果第乙個條件為真,則返回第乙個運算元,否則返回第二個運算元

(注意:無論第二個運算元是什麼,都返回第二個運算元,這和其他有些語言返回false有區別)=

lua的經典書籍《lua程式設計》中提到:and和or都是用「短路求值(short_cur evaluation)」,也就是說,它們只會在需要時才會去判斷第二個運算元。

短路求值可以確保像(type(tab) == 「table」 and tab[「msg」] == value)這樣的表示式不會導致執行錯誤。

「短路求值」可以保證在 tab不是table的情況,不會判斷 tab[「msg」] == value的值而直接返回false。

按照三目運算子的規則,lua的三目運算子可以寫成: a and b or c

a = false

b = false

a = false

這樣就會導致,當b為false時,三目運算子是無效的。

那麼怎樣才能保證b的值一直為真呢?實際的程式邏輯中是允許b為false或者nil的!

我在網上查資料,從大佬那裡學到乙個技巧,那就是:

b表示式的外邊包裝一層table,寫成的形式,返回時再寫成[1]的形式就可以,那麼整體的表示式就變成:(a and or )[1]

這樣就滿足第二個表示式恒為真的前提。

當程式設計師編碼時候確認b為真,那麼就用a and b or c,簡單粗暴。

不確定b是否為真時,使用 (a and or )[1] ,邏輯嚴謹。

lua中的三目運算子

開頭先說結論 1.簡單版三目運算子 需要自我保證 b 不為 false a and b or c 2.通用版三目運算子 a and or 1 推導過程 我們首先需要知道lua中的以下幾點規則 1.lua中只有 false 和 nil 視為 假 其他任何一切都為 真 包括 0 2.對於運算子 and ...

三目運算子

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