我没有在函数定义中使用长参数列表,而是更喜欢传递一些固定参数和一个"附加参数"表,如下所示:
function:doit( text, params )
end
Run Code Online (Sandbox Code Playgroud)
这很好,因为它允许我以后添加新的命名参数而不会破坏旧的调用.
当我尝试强制某些参数的默认值时,我遇到的问题出现了:
function:doit( text, params )
local font = params.font or native.systemBold
local fontSize = params.fontSize or 24
local emboss = params.emboss or true
-- ...
end
Run Code Online (Sandbox Code Playgroud)
上面的代码在所有情况下都可以正常工作,除非我通过'false'进行浮雕:
doit( "Test text", { fontSize = 32, emboss = false } )
Run Code Online (Sandbox Code Playgroud)
当我真的想要假时,上面的代码将导致浮雕设置为true.
要清楚,我想要的是将第一个非NIL值分配给浮雕,而不是我得到第一个非假和非NIL.
为了解决这个问题,我编写了一小段代码来查找表中的第一个非NIL值并返回:
function firstNotNil( ... )
for i = 1, #arg do
local theArg = arg[i]
if(theArg ~= nil) then return theArg end
end
return nil
end
Run Code Online (Sandbox Code Playgroud)
使用此函数,我将重写浮雕赋值如下:
local emboss = firstNotNil(params.emboss, true) …Run Code Online (Sandbox Code Playgroud) lua ×1