邏輯操作符---Lua: and,or,not 對比 C++:&&,||,!


     lua中有三個邏輯操作符:and,or,not(邏輯與,邏輯或,邏輯非),同樣c++也有類似的三個邏輯操作符:&&,||,!(邏輯與,邏輯或,邏輯非)。他們的運算對象就是真和假。lua中nil和false是屬於假,true和其他任何東西都是真。c++中也有類似的東西。0,NULL和false屬於假,true其他任何非空的東西都屬於真。lua與c++中邏輯運算規則相似卻又有所不同。

     他們都采用短路求值(short-circuit evaluation)的策略。即:邏輯與和邏輯或操作符都是先求左側運算對象的值再求右側運算對象的值,當且僅當左側運算對象無法確定表達式的結果時才會計算右側運算對象的值。這句話可以推導出很多令大家初看下比較詫異的說法。

     比如說:Lua中,and運算規則是:"如果and的第一個操作數(左操作數)是假就返回第一個操作數,如果為真就返回第二個操作數(右操作數)"。這句話其實很好理解,如果左操作數是假的,我們就不必再判斷第二個操作數,直接返回假就行了,也就是左操作數。如果左操作數是真,那么我們還得看右操作數,他為真,返回值就是真,他為假,返回值就是假。對應上面的"如果為真就返回第二個操作數(右操作數)"。細心的朋友會發現,lua返回的是操作數而非操作數對應的true或false。這一點也是lua和c++的區別所在,c++的邏輯操作返回的一定是0或1。

/*c++代碼*/
  std::cout<<(4&&5);        //輸出是1(返回true) 
  std::cout<<(4||5);         //輸出是1 (返回true)

--lua代碼
 print(4 and 5);                   --輸出是5 (返回數值5)
 print(4 or 5);                      --輸出是4(返回數值4)

雖然在這一點上c++和lua上有所區別,但這點差異也只是讓lua的邏輯操作符有了c++中三目運算符? : 的功能。比如說:

a and b or c -- 相當於a?b:c (*注意這是有前提的,前提就是b不為nil或false,即b是為真的)
max=(x>y)and x or y --這句代碼可以求兩者中大的一個並賦值到max

有一點不得不說,Lua中0也是為真的哦,這一點也很重要。


免責聲明!

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



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