如何在elixir中查看所有模块的导入和定义函数?
问题描述:
defmodule There do
import Othermodule, only: [a: 1]
def b do
end
end
我怎么能得到的功能a
& b
名单?
答
您可以使用__ENV__
macro结合由Dogbert提到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
如果删除最后一个Enum.map
你会得到{function_name, function_arity}
关键字列表。
+0
另外:'Enum.filter'可以和'Enum.map'结合成'Enum.filter_map',但为了便于阅读,我将它们分开。 – nietaki
你可以使用'There .__ info __(:functions)'获得定义的函数,但我不认为有任何方法可以获得导入的函数。你为什么需要这个?也许还有另一种方法来实现你想要的。 – Dogbert
'There .__ info __(:functions)'是我在互联网上发现的唯一信息。让我再问一个问题.... – asiniy