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?
您可以结合使用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}。