如何使函数接受动态参数?

问题描述 投票:2回答:1

[当处理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)更新,该函数将知道每个值的实际位置。

lua
1个回答
0
投票

您需要给函数一个带有任何名称的参数,然后将其用作其余参数。

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

将使用参数generic12和默认值"alpha"执行nil函数。

要明确表示您要设置的变量,可以执行:

a = generic{arg1=12,arg2="alpha"}

并且您将arg1 / arg2放入哪个顺序都没有关系。

但是,您不能在不预先定义它们的情况下接受额外的参数,例如,如果您尝试在花括号内为函数提供四个参数,则会吐出一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.