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)
| 归档时间: |
|
| 查看次数: |
3858 次 |
| 最近记录: |