【1】Lua函數,默認實參web
習慣了其餘語言(如C++)的默認實參,利用Lua語言的過程當中,發現沒有默認實參這種機制。函數
因此,本身模擬了一個知足業務需求的帶默認實參的函數。學習
(1)示例以下:lua
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)分析過程:url
若是調用函數時,若是沒有實參值,lua語言會認爲這個實參值爲nil。spa
利用Lua語言的這一特性,能夠模擬實現默認實參函數。.net
2.1 如上22行code
對func的調用時,沒有爲第二個參數arg2賦值,遵循Lua語言的語法,說明第二個參數的值爲nil。blog
在函數內部對nil值進行判斷,若沒有賦實參值,估能夠認爲欲利用默認實參值,將默認實參值賦值於參數2便可。get
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.
順序 選擇 循環 總結