2016-10-04 4 views
0

모듈을 함수에 전달하고 guard 절 (함수가 : atom 또는 module을 갖도록 설계됨)을 사용하려고합니다. 나는 함수에서 해당 인수를 확인할 수있는 방법엘릭서의 is_module 가드 절

는 모듈 (원자에 대한 같은 is_atom?)

답변

3

이것은 단지 가드 조항 불가능합니다. 이를 위해 함수 본문에 Code.ensure_loaded?/1을 사용할 것입니다.

iex(1)> defmodule A do 
...(1)> end 
iex(2)> Code.ensure_loaded?(A) 
true 
iex(3)> Code.ensure_loaded?(B) 
false 
iex(4)> Code.ensure_loaded?(Map) 
true 
iex(5)> Code.ensure_loaded?(:maps) 
true 
# I created `a.beam` using `erlc` in the same folder as `iex` was started 
iex(6)> Code.ensure_loaded?(:a) 
true 
+0

흠, 내 함수에서 어떻게 이것을 guard 절로 사용할 수 있습니까? – asiniy

+0

제 편집을 참조하십시오. 보호 조항에서는 불가능합니다. 'is_atom'은 가드에서 할 수있는 유일한 체크이며 모듈이 될 수없는 것들을 제거합니다. 그러나 모듈이 있는지를 검사 할 수는 없습니다. – Dogbert

+0

흠, 기존 모듈을 확인하고 싶지 않습니다. 원자 대신에 모듈이 전달되었는지 확인하고 싶습니다. – asiniy

0

는 모듈 이름은 원자 따라서 :이 코드 경로에 대응하는 빔 파일을 찾을 수있는 경우에 모듈이있는 아닌지 참/거짓 복귀 이외에, 또한이 모듈을로드 할 것이다 is_atom을 확인하는 것 외에는 요청하는 것이 불가능합니다.