【1】Lua函數,默認實參
習慣了其他語言(如C++)的默認實參,利用Lua語言的過程中,發現沒有默認實參這種機制。
所以,自己模擬了一個滿足業務需求的帶默認實參的函數。
(1)示例如下:
1 local function func(arg1, arg2) 2 3 if nil == arg2 then 4 arg2 = true 5 end 6 7 if arg1 then 8 print('arg1 value : ' .. arg1) 9 else 10 print('arg1 is false or nil') 11 end 12 13 if arg2 then 14 print('arg2 value : ' .. (type(arg2) == 'boolean' and 'true' or arg2) .. '\n') 15 else 16 print('arg2 value : false\n') 17 end 18 19 end 20 21 -- test 22 func('123') 23 func('456', 'abc') 24 func('lua', false) 25 func('web', true) 26 -- func(,true) 27 func('study') 28 29 --[[ 30 arg1 value : 123 31 arg2 value : true 32 33 arg1 value : 456 34 arg2 value : abc 35 36 arg1 value : lua 37 arg2 value : false 38 39 arg1 value : web 40 arg2 value : true 41 42 arg1 value : study 43 arg2 value : true 44 --]]
(2)分析過程:
如果調用函數時,如果沒有實參值,lua語言會認為這個實參值為nil。
利用Lua語言的這一特性,可以模擬實現默認實參函數。
2.1 如上22行
對func的調用時,沒有為第二個參數arg2賦值,遵循Lua語言的語法,說明第二個參數的值為nil。
在函數內部對nil值進行判斷,若沒有賦實參值,估可以認為欲利用默認實參值,將默認實參值賦值於參數2即可。
2.2 如上24行
對func的調用時,為第二個參數arg2賦值false,遵循Lua語言的語法,說明第二個參數的值為false。
在函數內部對nil值進行判斷,既然已賦實參值,那么肯定不是nil,其他邏輯直接使用實參值即可。
2.3 如上25行,與24行同理。
2.4 如上26行,不允許此種寫法!說明Lua語言同其他語言一致,遵循同樣的原則,如果參數有”默認實參值“,只允許從最后的參數賦值。
若不理解此條,可以學習一下C++語言的默認實參機制。可參見隨筆《為什么C++函數的形參默認值從最末一個賦值?》
2.5 如上27行,與22行同理。
(3)總結:
窮則思,思則變,變則通,通則達。
Good Good Study, Day Day Up.
順序 選擇 循環 總結