Case
case {1, 2, 3} do
  {1, _x, 3} ->
    "This clause will match and bind _x to 2 in this clause"
 
  {4, 5, 6} ->
    "This clause won't match"
 
   _ ->
    "This clause would match any value"
end"This clause will match and bind _x to 2 in this clause"To use pattern match you need to use pin^ operator
x = 1
 
case 10 do
  ^x -> "Won't match"
  _ -> "Will match"
end"Will match"Clause allow extra conditions to be specified via guards
case {1, 2, 3} do
  {1, x, 3} when x > 0 ->
    "Will match"
  _ ->
    "Would match, if guard condition were not satisfied"
end"Will match"Erros in guards will not leak but simply make the guard fail
iex> hd(1)
** (ArgumentError) argument error
  :erlang.hd(1)case 1 do
  x when hd(x) -> "Won't match"
  x -> "Got #{x}"
end"Got 1"Anonymous Functions can also have multiple clauses and guards
f = fn
  x, y when x > 0 -> x + y
  x, y -> x * y
endiex> f.(1, 3)
4
iex> f.(-1, 3)
-3referencies
Elixir Conditions: https://elixir-lang.org/getting-started/case-cond-and-if.html [archive]
 
 






