2015-01-17 2 views
8

의 내가 있다고 가정 해 봅시다 :엘릭서의 구조체 필드 유형을 확인하는 방법은 무엇입니까?

다음
defmodule Operator do 

    defstruct operator: nil 

    @type t :: %Operator { 
     operator: oper 
    } 

    @type oper :: logic | arithmetic | nil 
    @type logic :: :or | :and 
    @type arithmetic :: :add | :mul 

end 

I 할 수 있습니다

o = %Operator{operator: :and} 

o.operatorlogic, arithmetic 또는 nil 여부를 확인 할 수 있나요?

답변

8

Elixir의 Typespec은 주석이며 일부는 반복하지 않고 코드에서 실제로 상호 작용할 수 없습니다. 따라서, 당신은 쓸 수 있습니다 : 또는

def operator(%Operator{operator: op}) when op in [:or, :and, :add, :mul, nil] do 
    ... 
end 

또는를 :

@ops [:or, :and, :add, :mul, nil] 

def operator(%Operator{operator: op}) when op in @ops do 
    ... 
end 
+0

당신을 감사드립니다. 나는 그것을 할 수있는 매크로에 대해 생각할 것이다. – zie1ony

관련 문제