2015-01-17 17 views
8

ı var diyelim:Elixir'de yapı alanının türü nasıl kontrol edilir?

sonra
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 

elimden:

o = %Operator{operator: :and} 

o o.operatorlogic, arithmetic veya nil olup olmadığını kontrol etmek mümkün mı?

cevap

8

Elixir'deki typespecs ek açıklamalardır, bunlardan bir kısmını tekrar etmeden kodunuzla gerçekten etkileşime giremezsiniz. Bu nedenle, yazabilirsiniz: alternatif

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

Veya:

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

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

teşekkür ederim. Bunu yapmak için biraz makro düşüneceğim. – zie1ony