Lua 函數參數 & 默認實參


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

順序 選擇 循環 總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM