2016-03-01 13 views
7

Belirli bir modül için uygulamaları olan tüm modülleri bulmak mümkün olup olmadığını mı merak ediyordum?Belirli protokolleri uygulayan tüm modülleri bulmak mümkün mü?

defprotocol Ep.PerformTest do 
    @doc "Should return tupple {out, time}" 
    def test(struct) 
end 

Ve bu protokolün uygulamaları olan birkaç modülleri:

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 

cevap

7

Protocol.extract_impls/2 Eğer aradığınızı görünmektedir

Ben basit bir protokol var.

Verilen protokoller için uygulanan tüm türleri belirtilen yollardan ayıklar. OP'ın yorumuna

sayesinde burada kod söz konusu örneğin gibi görünmelidir ne: biz yolu, modül adı ihtiyaçlarını almak için buraya Erlang :code modülünü aradığınız yana

path = :code.lib_dir(:protocol_test, :ebin) 
mods = Protocol.extract_impls(Ep.PerformTest, [path]) 

Erlang'ın atom biçiminde olması.

+0

İkinci bir parametre olarak şunu geçmeliyim: code.all_loaded()? – Haito

+0

Bence böyle bir durum değil. belgelerine bağlı olarak iex> yol =: code.lib_dir (: elixir,: ebin), yol iksir devkit konumuna giden yolu içerir – Haito

+0

Bunu deneyin ve çalışıp çalışmadığını görün. Yol parametresinin ne olması gerektiğini gerçekten bilmiyorum. – CoderDennis

İlgili konular