我怎样才能看到 Elixir 中所有模块导入和定义的函数?

asi*_*niy 5 metaprogramming elixir

我有模块

defmodule There do
  import Othermodule, only: [a: 1]

  def b do
  end
end
Run Code Online (Sandbox Code Playgroud)

a我怎样才能获得函数&的列表b

nie*_*aki 5

您可以结合使用Dogbert提到的__ENV__Module.__info__(:functions)

my_functions = __MODULE__.__info__(:functions)
imported_functions = __ENV__.functions
  |> Enum.filter(fn {module, _functions} -> module != Kernel end)
  |> Enum.map(&elem(&1, 1))
  |> List.flatten

(my_functions ++ imported_functions)
  |> Enum.map(&elem(&1, 0))
  |> inspect
  |> IO.puts
Run Code Online (Sandbox Code Playgroud)

如果删除最后一个,Enum.map您将获得 的关键字列表{function_name, function_arity}