1
Elixir Decimal包是否有等價的is_string,is_number,is_integer,is_binary?Elixir中十進制數據類型的測試?
如果不是,那麼爲Decimal模式匹配有哪些方法?
Elixir Decimal包是否有等價的is_string,is_number,is_integer,is_binary?Elixir中十進制數據類型的測試?
如果不是,那麼爲Decimal模式匹配有哪些方法?
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