Elixir有splat操作符吗?

Kit*_* Ko 13 elixir

defmodule UnixCommands do
    alias Porcelain.Result
        def run(command, *opts) do
             %Result{out: output, status: _} = Porcelain.exec(command, [opts])
             IO.puts output
        end
end
Run Code Online (Sandbox Code Playgroud)

在Elixir中是否有等效的splat运算符,例如*opts?是否有办法将多个选项而不是选项列表作为参数传递给exec函数?

Gaz*_*ler 20

没有splat运算符.Elixir(和Erlang)中的函数由它们的名称和arity(String.downcase/1,Enum.member?/2)定义,并且可变参数函数将违背此.

这是Erlang的一位作者Joe Armstrong在他的书"Erlang编程:并行世界的软件"中提到的:

1)函数的arity是其名称的一部分;
2)没有可变函数.

如果要调用带有参数列表的函数(与您想要的相反),可以使用Kernel.apply/3.

例如

defmodule Test do
  def add(a, b, c) do
    a + b + c 
  end
end

apply(Test, :add, [1, 2, 3])
Run Code Online (Sandbox Code Playgroud)