作者:柏拉图恋情 | 来源:互联网 | 2023-05-26 12:35
比方说我有:
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
然后我可以:
o = %Operator{operator: :and}
它是可能的,以检查是否o.operator
是logic
,arithmetic
还是nil
?
1> José Valim..:
Elixir中的Typespecs是注释,你不能真正地从代码中与它们交互而不重复它们的一部分.因此,你可以写:
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