Elixir,从列表或元组中解压缩参数

Ale*_*arf 2 arguments metaprogramming parameter-passing elixir

我想让以下内容运行

def myfunction(a, b) do
    IO.puts "Success"
end

def runstuff do
    jobs = {&myfunction/2, [1, 3]}
    {to_run, args} = jobs
    to_run.(args) # broken code
end
Run Code Online (Sandbox Code Playgroud)

好吧,上面的代码被打破,但我认为显示我想要实现的,我是一个快乐的Elixir新手(显然:))我希望它可以用一些elixir宏魔法解决.编辑:根据评论移动作业.

Paw*_*zak 7

你可能想看看的是Kernel.apply/3.

这是被称为图案MFA:Module,Function,Arguments.这需要在某个模块中定义您的函数.

请考虑以下示例:

defmodule Fun do
  def myfunction(a, b) do
    IO.puts "Success, a: #{a}, b: #{b}"
  end

  def runstuff do
    jobs = {Fun, :myfunction, [1, 3]}
    {m, f, a} = jobs
    apply(m, f, a)
  end
end

Fun.runstuff
Run Code Online (Sandbox Code Playgroud)

所以:

? elixir fun.exs
Success, a: 1, b: 3
Run Code Online (Sandbox Code Playgroud)