我想让以下内容运行
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
嗯,上面的代码已被破解,但我认为显示了我想要实现的目标,我很高兴Elixir新手(显然:) :)我希望它可以用一些灵药宏魔法来解决。 编辑:根据评论移动工作。
答案 0 :(得分: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
所以:
▶ elixir fun.exs
Success, a: 1, b: 3
答案 1 :(得分:0)
我怀疑你的真实例子涉及更长的args列表,但这是让你的例子工作的方法。
def myfunction(a, b) do
IO.puts "Success"
end
def runstuff do
jobs = {&myfunction/2, [1, 3]}
{to_run, [a, b]} = jobs
to_run.(a,b) # unbroken code
end