有没有办法遍历传递给 Elixir 中函数的所有参数?

Is there a way to iterate over all arguments passed to a function in Elixir?

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

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

的回答中

我寻找此功能的原因是,我曾多次发现自己对多个参数应用相同的转换,这有点乏味。这可以通过宏实现吗?

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

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

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]