首页 > 解决方案 > Elixir 将模块的引用作为函数参数传递

问题描述

我对长生不老药/凤凰很陌生。我有这样的功能

defp get_list(old_result, filter) do
  MY.Model.search_name(filter)
  |> Enum.concat(old_result)
end

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

defp get_list(old_result, filter, AnotherModel) do
  MY.AnotherModel.search_name(filter)
  |> Enum.concat(old_result)
end

但是当然上述功能不起作用。我怎样才能做到这一点?

标签: elixirphoenix-framework

解决方案


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

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)

推荐阅读