2017-04-24 38 views

回答

4

Decimal是一個Elixir結構。因此,您可以使用%Decimal {}進行匹配。這可以添加到你的函數子句或case語句中。這裏有幾個例子:

def add(%Decimal{} = x, %Decimal{} = y), do: Decimal.add(x, y) 

case num do 
    %Decimal{} = x -> # ... 
    num when is_integer(num) -> # ... 
    _ -> # default case 
end 

同樣的方法適用於匹配任何Elixir結構。匹配規則類似於maps。但是,結構只包含它們定義的字段,並且所有這些字段都存在於結構中。

這意味着你不能匹配存在的文件必須在默認值上完成。例如:

# to match a struct that contains the `:mode` key you can do this: 

def my_fun(%{mode: _}), do: # matches if the :mode key is present 
def my_fun(%{}), do: # default case when map does not contain the :mode key 

# to do the same with a struct 

def MyStruct do 
    defstruct mode: nil, other: true 
end 

def my_fun(%MyStruct{mode: mode}) when not is_nil(mode), do: # do something with mode 
def my_fun(%MyStruct{}), do: # default case when mode is nil