如何在elixir中查看所有模块的导入和定义函数?

问题描述:

我模块如何在elixir中查看所有模块的导入和定义函数?

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

    def b do 
    end 
end 

我怎么能得到的功能a & b名单?

+2

你可以使用'There .__ info __(:functions)'获得定义的函数,但我不认为有任何方法可以获得导入的函数。你为什么需要这个?也许还有另一种方法来实现你想要的。 – Dogbert

+0

'There .__ info __(:functions)'是我在互联网上发现的唯一信息。让我再问一个问题.... – asiniy

您可以使用__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