您好,登錄后才能下訂單哦!
這篇文章主要講解了“Lua中的三目運算怎么理解”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Lua中的三目運算怎么理解”吧!
Lua 是一種輕量小巧的腳本語言,用標準C語言編寫并以源代碼形式開放, 其設(shè)計目的是為了嵌入應(yīng)用程序中,從而為應(yīng)用程序提供靈活的擴展和定制功能。
熟悉 C/C++ 的老司機都知道三目運算 a ? b : c,這種寫法替換簡單的條件判斷語句可以在不增加閱讀難度的情況下,使代碼盡量保持簡潔。
int a, b, ret; //if-elseif (a > b) ret = a;else ret = b; //三目運算符 ret = a > b ? a : b;
Lua 原生的語義并沒有實現(xiàn)三目運算,一般是通過邏輯運算符 and 和 or 來模擬三目運算符的。
Lua 中 and 和 or 都使用”短路求值(short_cur evaluation)”,也就是說,它們只會在需要時才去評估第二個操作數(shù)。
local a, b, ret; ret = a > b and a or b
窮舉所有可能性:
a > b 時:
a > b and a –> truea or b –> a
a
a > b and a –> falsea or b –> b
完美!
按照從特殊到一般的原則:
三目運算的一般形式a ? b : c
a = true,結(jié)果為b a = false,結(jié)果為c
對應(yīng)Lua中的a and b or c
可以看到當 b = false 時,Lua模擬的 a and b or c 始終返回 c 并不能還原三目運算符的原貌。
那么有沒有辦法可以解決 b = false 失效的問題呢?
由此我聯(lián)想到 C 語言有一道常規(guī)的考題:請使用宏定義寫一個返回兩個值中較小值的方法。
在校時第一次看到本題,第一反應(yīng)如下:
#define MIN(A,B) A
然而這種寫法在很多嵌套的使用環(huán)境中都不能返回正確的結(jié)果。比如:2 * MIN(3, 4)展開為 2 * 3
#define MIN(A,B) ((A)
還有好奇心的同學(xué)可以參考:宏定義的正確寫法,三目運算的宏定義
從這個示例中,我就在想如何能保證 a and b or c 中 b 為真或者 b 不產(chǎn)生歧義呢?
感謝各位的閱讀,以上就是“Lua中的三目運算怎么理解”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Lua中的三目運算怎么理解這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。