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是否有类似的东西
答案 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)