Elixir Kernel.apply/2 和 Kernel.apply/3 替代品?
Elixir Kernel.apply/2 and Kernel.apply/3 alternatives?
我正在创建一个动态执行函数的任务。这个函数每次都不一样,参数的数量也不一样([1, "hi", :a]
),所以我使用的是Kernel.apply/2
.
defp create_task(f, args) do
Task.async(fn -> apply(f, args) end)
end
但我无法让它与私有函数一起工作(使用 defp
声明):
create_task(&__MODULE__.my_private_fun/3, args)
如果您传递的函数是在模块中使用 defp
定义的,那么您无法从外部调用它。但如果它在同一个模块中,你仍然可以调用它:
create_task(&my_private_fun/3, args)
这里要注意的重要一点是,您必须指定函数元数(没有宏)这一事实是无法回避的,那么为什么不直接调用函数呢?
我正在创建一个动态执行函数的任务。这个函数每次都不一样,参数的数量也不一样([1, "hi", :a]
),所以我使用的是Kernel.apply/2
.
defp create_task(f, args) do
Task.async(fn -> apply(f, args) end)
end
但我无法让它与私有函数一起工作(使用 defp
声明):
create_task(&__MODULE__.my_private_fun/3, args)
如果您传递的函数是在模块中使用 defp
定义的,那么您无法从外部调用它。但如果它在同一个模块中,你仍然可以调用它:
create_task(&my_private_fun/3, args)
这里要注意的重要一点是,您必须指定函数元数(没有宏)这一事实是无法回避的,那么为什么不直接调用函数呢?