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.
顺序 选择 循环 总结