获取elixir中的所有参数和关键字参数

时间:2018-04-16 10:57:16

标签: elixir

elixir有没有办法从函数中获取所有参数和关键字参数并将它们发送到另一个函数?

类似的东西:

def func1("test", 10) do
  ...
end

def func2("test", "string", "another string", 10) do
  ...
end

def check(type, *args, **kwargs) do
  case type do
    :func1 -> func1(*args, **kwargs)
    :func2 -> func2(*args, **kwargs)
  end
end

check(:func1, "test", 10)
check(:func2, "test", "string", "another string", 10)

注意func1和func2现在可能具有相同数量的参数

在python中你可以使用** kwargs和* args实现这一点,我不确定elixir是否有类似的东西

1 个答案:

答案 0 :(得分:1)

Elixir不支持具有可变数量参数的函数。您可以做的最好的事情是接受check中的参数列表并使用apply将其动态传递给函数:

def check(type, args) do
  case type do
    :func1 -> apply(__MODULE__, :func1, args)
    :func2 -> apply(__MODULE__, :func2, args)
  end
end

您现在可以像这样致电check

check(:func1, [:foo, :bar, baz: :quux])

并在内部致电:

func1(:foo, :bar, baz: :quux)