代码之家  ›  专栏  ›  技术社区  ›  deko

Elixir Kernel.apply/2和Kernel.apply/3替代方案?

  •  0
  • deko  · 技术社区  · 6 年前

    我正在创建一个动态执行函数的任务。这个函数每次都不同,参数的数量也不同( [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)
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Sheharyar    6 年前

    如果要传递的函数是使用 defp

    create_task(&my_private_fun/3, args)
    

    这里需要注意的重要一点是,必须指定函数arity(没有宏)这一事实是绕不开的,所以为什么不直接调用函数呢?