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

时间:2019-11-07 18:50:55

标签: lua

在处理function(v1,v2,v3)或function(...)时,似乎没有一种好方法来处理调用函数时放置参数的位置的变化。

示例功能:

df = df.loc[df['var'].isin(df2['this'].unique().tolist())]

args函数示例:

my_function(v1,v2,v3) {
  print(v1, v2, v3)
}

从以上两个示例中您可以做到

my_args_func(...) {
  local arg = {...}
  for i,v in ipairs(arg) do
    print(v)
  end
}

但是,如果您要对它们中的任何一个进行更改,那么管理所有功能参数更新就变得很麻烦。

假设我们要为两个函数添加一个新值。 newval10。

我们将不得不将my_function()放在最后,例如my_function(v1,v2,v3,newval10),否则除非我们同时更新调用和接受的函数参数,否则事情将无法正常进行。 / p>

func(...)也是一样,我们只知道索引值和实际值。不是他们代表的。有没有办法拥有这样的功能

my_function(set1,set2,set3)
my_arg_func(set1,set2,set3)

可以使用my_generic_func(v1,v5,v3,v4,v2)更新,该函数将知道每个值的实际位置。

1 个答案:

答案 0 :(得分: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的顺序无关紧要。

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

基本上,这是将一个表输入到具有一个参数的函数中,然后从该表而不是多个参数中获取信息。