我想知道是否有可能找到所有具有特定模块实现的模块?
我有一个简单的协议:
defprotocol Ep.PerformTest do
@doc "Should return tupple {out, time}"
def test(struct)
end
Run Code Online (Sandbox Code Playgroud)
并且很少有具有此协议实现的模块:
defmodule Ep.Test.Rexcpp do
defstruct [:input, :code, :output]
def displayName(), do: "Rextester C++"
defimpl Ep.PerformTest, for: Ep.Test.Rexcpp do
def test(struct) do
end
end
end
Run Code Online (Sandbox Code Playgroud)
Protocol.extract_impls/2似乎是您正在寻找的.
从给定路径中提取为给定协议实现的所有类型.
感谢OP的评论,以下是问题中示例的代码:
path = :code.lib_dir(:protocol_test, :ebin)
mods = Protocol.extract_impls(Ep.PerformTest, [path])
Run Code Online (Sandbox Code Playgroud)
由于我们在这里调用Erlang:code模块来获取路径,因此模块名称需要采用Erlang使用的原子格式.