Lua 函數參數 & 默認實參

【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.

順序 選擇 循環 總結

相關文章
相關標籤/搜索