Se una funzione ha diverse clausole, Elixir cercherà ogni clausola finché non ne trova uno che corrisponde. Ciò consente di "filtrare" sulla base degli argomenti forniti - particolarmente utile se le funzioni non condividono alcuna logica comune.
def load([]), do: IO.puts("empty")
def load(token) when token == nil, do: IO.puts("nil") # Matching `nil' is OK too.
def load(token), do: process(token)
La seconda clausola illustra l'uso di protezioni che consentono corrispondenze più generali, ci sono a number of predicates that are valid as guards ognuno dei quali può essere collegato a (quasi) qualsiasi espressione che vengono utilizzati per commutare sulla funzione-argomenti, ricorsivamente o altrimenti.
Questa convenzione vale per tutte le lingue BEAM esistenti ed è utile da tenere presente durante la lettura della documentazione OTP.
fonte
2016-06-13 03:00:57
Destra quindi anche questo va bene, '' def carico (nil), do: IO.puts ("nil") '' Grazie. –