2017-01-03 5 views
1

내가 가진 모듈엘랙서에서 모든 모듈의 임포트되고 정의 된 기능을 어떻게 볼 수 있습니까?

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

답변

1

당신은 Dogbert 언급 Module.__info__(:functions)으로 __ENV__ macro 조합을 사용할 수 있습니다

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