小编Ed *_*ina的帖子

LUA:寻求有效且无差错的方法来分配默认参数

我没有在函数定义中使用长参数列表,而是更喜欢传递一些固定参数和一个"附加参数"表,如下所示:

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

5
推荐指数
1
解决办法
571
查看次数

标签 统计

lua ×1