Elixir 将模块的引用作为函数参数传递

Kam*_*han 3 elixir phoenix-framework

我对 Elixir/phoenix 很陌生。我有这样的功能

defp get_list(old_result, filter) do
  MY.Model.search_name(filter)
  |> Enum.concat(old_result)
end
Run Code Online (Sandbox Code Playgroud)

现在,为了使其更具可重用性,我想将 的引用传递Model给函数,使其类似于:

defp get_list(old_result, filter, AnotherModel) do
  MY.AnotherModel.search_name(filter)
  |> Enum.concat(old_result)
end
Run Code Online (Sandbox Code Playgroud)

但当然上面的功能是行不通的。我怎样才能做到这一点?

Kev*_*son 6

您可以将完整的模块名称作为普通参数传递,如下所示:

defmodule A do
  def get_list(old_result, filter, some_module) do
    filter
    |> some_module.search_name
    |> Enum.concat(old_result)
  end
end

A.get_list(old_result, filter, MY.AnotherModule)
Run Code Online (Sandbox Code Playgroud)