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)

这里要注意的重要一点是,您必须指定函数元数(没有宏)这一事实是无法回避的,那么为什么不直接调用函数呢?