2015-01-17 24 views
8

Lassen Sie uns sagen, ich habe:Wie überprüft man den Typ des Felds 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 

dann kann ich:

o = %Operator{operator: :and} 

Ist es möglich, zu prüfen, ob o.operator ist logic, arithmetic oder nil?

Antwort

8

Bei den Typspezifikationen in Elixir handelt es sich um Anmerkungen. Sie können nicht wirklich mit ihnen interagieren, ohne einen Teil davon zu wiederholen. Daher können Sie schreiben:

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

Oder alternativ:

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

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

danken Ihnen. Ich werde über ein Makro nachdenken, um es zu tun. – zie1ony

Verwandte Themen