1. 程式人生 > >lua中邏輯運算子and與or的用法

lua中邏輯運算子and與or的用法

總的來說就是,and返回導致返回值為false的那個值。a and  b,如果a為假就返回a,否則返回b。   or的用法就是返回導致true的那個,  a and b,如果a為真就返回a,否則返回B.

邏輯運算子認為false和nil是假(false),其他為真,0也是true.
and的優先順序比or高
其它語言中的and表示兩者都為真的時候,才返回為真,而只要有一個假,都返回假.lua雖不僅返回假的語義,還返回導致假的值.也就是說
a and b
在a為false的時候,返回a,否則返回b.
or的處理與之類似,
a or b
在a為true的時候,返回a,否則返回b.
總之,and與or返回的不僅有true/false的語義,還返回了它的值.

[cpp] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. a = nil  
  2. b = 1  
  3. exp = 1 < 2 and a or b  
  4. print(exp == a) --fales  
  5. exp = 1 > 2 and a or b  
  6. print(exp == b) --true
  7. exp = (1 < 2 and {a} or {b})[1]  
  8. print(exp == a) --true
  9. exp = (1 > 2 and {a} or {b})[1]  
  10. print(exp == b) --true
a = nil
b = 1
exp = 1 < 2 and a or b
print(exp == a) --fales
exp = 1 > 2 and a or b
print(exp == b) --true
exp = (1 < 2 and {a} or {b})[1]
print(exp == a) --true
exp = (1 > 2 and {a} or {b})[1]
print(exp == b) --true

false
true
true
true
不過正確的方案書寫太過複雜,反而弄巧成拙。lua中沒有提供語言內建的支援,還是轉向正常的if/else吧。
當然,如果編碼者能夠斷言c and a or b中的a一定為真,那直接用這種寫法也不會錯,但這就是一個hack了,不值得推崇。

相關推薦

lua邏輯運算子andor用法

總的來說就是,and返回導致返回值為false的那個值。a and  b,如果a為假就返回a,否則返回b。   or的用法就是返回導致true的那個,  a and b,如果a為真就返回a,否則返回B. 邏輯運算子認為false和nil是假(false),其他為真,0也是t

Luaand or的特殊用法

Lua中的所有的邏輯運算子將false和nil視為假,其他任何東西視為真,0也視為真。and:and就是 "或 ,與 ,非" 中的 "與"  同真則真,一假則假。function Test(){a=true b=falsec=0e=nilreturn  c and e and

SQL SERVERAndOr的優先級

但是 使用 條件 bsp png alt 技術 sele 城市 數據庫中有城市庫表,其中有國家、省、城市。 舉例:在廣東省內(包含廣東省本身),找出名稱為“廣州”的記錄 首先,廣東省內的條件是:ParentId = 2 Or Id =2 名稱為“廣州”的條件是:

pythonandor用法

在python中and和or返回的值並不是True和false這麼簡單。雖然他們看上去和c++中的&&和||有些相似。在瞭解and和or之前,我們先要了解python中的True和False。 在python裡面,0、’’、[]、()、{}、None為假,其它任何東西都為真。ok,在此前提下

pythonandor

一、問題起源: main=None main=main or sys.modules["__main__"].main main返回的是後面一個值,即 sys.modules["__main__"].main 和原先想的不同,來驗證下 二、解決方案: "and 優先順序大於or 的證明" pri

邏輯運算子and or 的理解

    python 做邏輯運算的時候,我有一些有趣的理解。 例如: a = True b = False c = True d = a or b and c 那麼d = ? 在中學學習排列組合的時候,就有過這樣的方法:分步驟用乘法,分類別用加法。 所以可以把

lua運算子if語句

--lua中的運算子 加+ 減- 乘* 除/ a=3+5 b=3-1 c=11-2*2 d=1+9/3 print(a,b,c,d) --關係運算符 大於> 小於< 等於== 不等於~=

sql語句 and or 的優先級

com info ima .com 分享 src 技術分享 sql 語句 sql語句中 and 與or 的優先級

Lua的元表元方法

類型 得到 算術 自己的 連接 還記得 clas 是否 操作符 前言Lua中每一個值都可具有元表。 元表是普通的Lua表,定義了原始值在某些特定操作下的行為。你可通過在值的原表中設置特定的字段來改變作用於該值的操作的某些行為特征。比如。當數字值作為加法的操作數時,Lua檢

Lua“.”調用方法“:”調用方法的區別

-- name obj oca -s fun str member elf Lua中“.”調用方法與“:”調用方法的區別:

thinkphp 5, andor多條件查詢

最終的查詢條件為where feed_uid=5 and (status=1 or status =2 or status =3 ) $where = [ 'feed_uid' => [ 'eq' , 5] , 'status' => [ [ 'eq' , 1

python-andor用法

python中的邏輯運算 and和or執行邏輯運算,但是它們不會返回bool值,而是返回它們進行比較的值之一 and >>> 1 and 2 取2 >>>1 and 2 and 3 返回3 >>>[1,] and True 返回True

mysqlleft join .. and where的區別

t1表: t2表: left join結果: select t1. id ,t1. name ,t2. id ,t2. name from t1 left join

JavaScript邏輯運算子(&&、||、!)的優先順序和運算順序

對邏輯運算子只停留在會用的層次,一直沒有專門瞭解其原理。今天得空,好好深究一下,這裡做個筆記,用來參考。 三個邏輯運算子(&&、||、!)優先順序是:!、&& 、||  。 邏輯與(&&)和邏輯或(||)運算子都遵循短路原

MySQL 語句執行優先順序——andor

轉:   MySQL 語句中執行優先順序——and比or高 2017年04月20日 13:33:03 十步行 閱讀數:7381   MySQL中,AND的執行優先順序高於OR。也就是說,在沒有小括號()的干預下,總是先執行AND語句,再執行O

lua pairs 和 ipairs區別 和用法

標準庫提供了集中迭代器,包括迭代檔案每行的(io.lines),迭代table元素的(pairs),迭代陣列元素的(ipairs),迭代字串中單詞的  (string.gmatch)等等。LUA手冊中對與pairs,ipairs解釋如下 ipairs(t) Re

sql語句同時使用ANDOR 關鍵字即兩者優先順序問題

在ORACLE 資料庫中 通過AND 關鍵字 和 OR同時進行條件查詢時出現了意外的資料,我的sql是這樣的: select red_book_type ,send_flag from red_mess_stat where red_book_type = ‘1

C語言邏輯運算子的陷阱

我們經常使用邏輯運算子來進行諸如此類的運算: if (a == b && b == c ) 這裡使用&& 來保證兩個表示式都為true時if裡面的語句才被執行。 但是,必須注意的是,當使用類似於a==b&&

lua的全域性變數區域性變數

 1.全域性變數: 全域性變數不需要宣告,只需要直接給賦值即可。當然刪除一個全域性變數喜歡只需要將他賦值為nil即可。換句話說如果存在一個全域性變數必然具有一個非nil值。 2.區域性變數    用local宣告,其作用域僅限於宣告他們的那個塊。這個塊可以是區域性

matlab卷積convolutionfilter用法

script time code returns blank 中心 watermark esc tail 轉自:https://blog.csdn.net/dkcgx/article/details/46652021 轉自:https://blog.csdn.net/Re