2015-01-17 20 views
8

Diciamo che ho:Come controllare il tipo di campo della struct in Elixir?

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 

allora posso:

o = %Operator{operator: :and} 

E 'per poter controllare se o.operator è logic, arithmetic o nil?

risposta

8

I tipi di carattere nell'elisir sono annotazioni, non è possibile interagire con loro dal codice senza ripetere una parte di essi. Pertanto, è possibile scrivere:

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

O in alternativa:

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

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

grazie. Penserò a qualche macro per farlo. – zie1ony