Imagine that you have a value response that could be a few things:
response = {:ok, result}
response = {:error, reason}
response = {:invalid, :other, :fields}
Then the cases would be:
# This would work for the first two cases returning result in the first one,
# {:error, other} for the second one and raise an exception for the third one (no match at all).
case response do
{:ok, result} -> result
{_, other} -> {:error, other}
end
# This would work for all the cases and return result for the first case,
# {:error, other} for the second case and
# {:error, {:invalid, :other, :fields}} for the third one
case response do
{:ok, result} -> result
other -> {:error, other}
end
# This would return result for the first case and :ok for any other response.
case response do
{:ok, result} -> result
_other -> :ok
end
Usually you will match a value that comes from a function and the clauses of the match will depend of the format of the result of that function.






















