[当处理function(v1,v2,v3)或function(...)时,似乎没有一种好方法来处理调用函数时放置参数的位置的变化。
示例功能:
my_function(v1,v2,v3) {
print(v1, v2, v3)
}
示例args函数:
my_args_func(...) {
local arg = {...}
for i,v in ipairs(arg) do
print(v)
end
}
从以上两个示例中您可以做
my_function(set1,set2,set3)
my_arg_func(set1,set2,set3)
但是,如果您要对它们中的任何一个进行更改,那么管理所有功能参数更新就变得很麻烦。
假设我们要为两个函数添加一个新值。 newval10。
my_function()我们将不得不像my_function(v1,v2,v3,newval10)那样放在最后,否则除非我们同时更新调用和接受的函数参数,否则事情将无法正常进行。
func(...)也是一样,我们只知道索引值和实际值。不是他们代表的。有没有办法像
这样的功能local my_generic_func(...) {
-stuff goes here
}
if my_generic_func(v1,v2,v3) then return end
可以用my_generic_func(v1,v5,v3,v4,v2)更新,该函数将知道每个值的实际位置。
您需要给函数一个带有任何名称的参数,然后将其用作其余参数。
local function generic(par)
_generic(par.arg1 or 0, --sets a default value of 0
par.arg2 or "arg2",
par.arg3 --default is "false" or "nil"
)
end
其用法如下:
a = generic{12,"alpha"} --note the use of curly braces
将使用参数generic
,12
和默认值"alpha"
执行nil
函数。
要明确表示您要设置的变量,可以执行:
a = generic{arg1=12,arg2="alpha"}
并且您将arg1 / arg2放入哪个顺序都没有关系。
但是,您不能在不预先定义它们的情况下接受额外的参数,例如,如果您尝试在花括号内为函数提供四个参数,则会吐出一个错误。