我知道可以将一个list
传递给一个函数,然后迭代它。但是,我更喜欢具有更明确签名的函数。所以我真正想知道的是Elixir是否有任何与Javascript中的arguments
对象相同的东西。
据我所知,答案是否定的。我在讨论这个主题时最接近的是this question的答案。
我正在寻找这个功能的原因是,我有几次发现自己将相同的转换应用于多个参数,这有点单调乏味。这可以通过宏来实现吗?
答案 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]