[動態語言]python和lua中的三元操作符and-or

來源:互聯網
上載者:User

在這兩種語言中,運算式a and b的傳回值不是true或false,而是a/b當中非真的值,而表示a or b返回的是a/b當中為真的那個。

因此,要想類比C/C++中的三元操作符c ? a : b,簡單的用c and a or b是不行的,因為當c為真,而a為假時,返回的是b而不是a,這不符合三元操作符的定義。

以前學lua的時候,看lua之父的那本《lua程式設計》,他提到這個問題,但沒有說怎麼解決,而是推薦用普通的if/else代替,今天我在看《python核心編程》的時候,發現原來python社區早處理好了這個問題(當然,肯定lua社區早也處理好,我不知道罷了),這裡也在lua中測試一下方案。另外因為三元操作被來自C的程式員在python中大量使用,python後來也增加了專門的三元操作文法代替and-or的hack:a if c else b。

 

這是lua代碼:

 1 a = nil
2 b = 1
3
4 exp = 1 < 2 and a or b
5 print(exp == a) --fales
6 exp = 1 > 2 and a or b
7 print(exp == b) --true
8
9 exp = (1 < 2 and {a} or {b})[1]
10 print(exp == a) --true
11 exp = (1 > 2 and {a} or {b})[1]
12 print(exp == b) --true

python代碼:

 1 a = 0
2 b = 1
3
4 exp = 1 < 2 and a or b
5 print exp == a # 輸出False
6 exp = 1 > 2 and a or b
7 print exp == b # 輸出True
8
9 exp = (1 < 2 and [a] or [b])[0]
10 print exp == a # 輸出True
11 exp = (1 > 2 and [a] or [b])[0]
12 print exp == b # 輸出True
13
14 exp = a if 1 < 2 else b
15 print exp == a # 輸出True
16 exp = a if 1 > 2 else b
17 print exp == b # 輸出True

 

不過正確的方案書寫太過複雜,反而弄巧成拙。lua中沒有提供語言內建的支援,還是轉向正常的if/else吧。

當然,如果編碼者能夠斷言c and a or b中的a一定為真,那直接用這種寫法也不會錯,但這就是一個hack了,不值得推崇。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.