有没有办法迭代传递给Elixir中函数的所有参数?

时间:2015-04-18 20:45:38

标签: elixir

我知道可以将一个list传递给一个函数,然后迭代它。但是,我更喜欢具有更明确签名的函数。所以我真正想知道的是Elixir是否有任何与Javascript中的arguments对象相同的东西。

据我所知,答案是否定的。我在讨论这个主题时最接近的是this question的答案。

我正在寻找这个功能的原因是,我有几次发现自己将相同的转换应用于多个参数,这有点单调乏味。这可以通过宏来实现吗?

1 个答案:

答案 0 :(得分:14)

这是可能的,但我很少使用它:

在函数顶部调用binding()将为您提供范围及其值中绑定的关键字列表,如果您将其作为函数的第一行调用,则为参数,即:< / p>

iex(6)> defmodule Mod do
...(6)>   def args(a, b, c) do
...(6)>     for {arg, val} <- binding() do
...(6)>       IO.puts "#{arg} = #{inspect val}"
...(6)>     end
...(6)>   end
...(6)> end


iex(7)> Mod.args(1,2,3)
a = 1
b = 2
c = 3
[:ok, :ok, :ok]