Gibt es ein Äquivalent von is_string, is_number, is_integer, is_binary für das Elixir Decimal-Paket?Testen auf Dezimaldaten in Elixir?
Wenn nicht, was sind einige der Möglichkeiten, Muster für ein Dezimalsystem zu finden?
Gibt es ein Äquivalent von is_string, is_number, is_integer, is_binary für das Elixir Decimal-Paket?Testen auf Dezimaldaten in Elixir?
Wenn nicht, was sind einige der Möglichkeiten, Muster für ein Dezimalsystem zu finden?
Decimal
ist eine Elixir-Struktur. Sie können also mit% Dezimal {} übereinstimmen. Dies kann zu Ihrer Funktionsklausel oder in Fallanweisungen hinzugefügt werden. Hier sind paar Beispiele:
def add(%Decimal{} = x, %Decimal{} = y), do: Decimal.add(x, y)
case num do
%Decimal{} = x -> # ...
num when is_integer(num) -> # ...
_ -> # default case
end
Der gleiche Ansatz gilt für den Abgleich einer Elixir-Struktur. Die Übereinstimmungsregeln sind ähnlich wie maps
. Eine Struktur enthält jedoch nur die Felder, mit denen sie definiert sind, und alle diese Felder sind in der Struktur vorhanden.
Dies bedeutet, dass Sie bei Vorhandensein einer Datei nicht übereinstimmen können auf den Standardwert vorgenommen werden. Zum Beispiel:
# 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