检查Elixir模块是否导出特定功能

She*_*yar 5 elixir

如何检查Elixir模块是否暴露了特定的公共方法?如何检查该功能是否已被特定曝光arity

不起作用:

  • Map.methods
  • Map.functions
  • Map.has_function(:keys)

She*_*yar 11

此处的答案论坛讨论的基础上,有几种方法可以做到:


检查模块是否存在功能

您可以检查函数名称是否作为键存在 Map.__info__(:functions)

module = Map
func   = :keys

Keyword.has_key?(module.__info__(:functions), func)
# => true
Run Code Online (Sandbox Code Playgroud)

检查功能是否存在特定的arity

要查看arity,我们可以使用Kernel.function_exported?/3:

Kernel.function_exported?(Map, :keys, 1)         # => true
Kernel.function_exported?(Map, :keys, 2)         # => false
Run Code Online (Sandbox Code Playgroud)

  • `module .__ info__`足以检查具有特定arity的函数:`Map .__ info __(:functions)|> Enum.filter(fn {k,_} - > k ==:get end)[get:2 ,得到:3]`. (2认同)