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宏魔法解决.编辑:根据评论移动作业.
你可能想看看的是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)