Tracce
/
Elixir
Elixir
/
Programma
/
Pattern matching
Pa

Pattern matching in Elixir

73 esercizi

Informazioni su Pattern matching

Quando scriviamo funzioni in Elixir, possiamo usare uno stile assertivo con il pattern matching:

def read_file() do
  {:ok, contents} = File.read("hello.txt")
  contents
end
  • Il pattern matching si esegue in modo esplicito con l'operatore di match, =/2.

    • La corrispondenza riesce quando la forma dei dati sul lato sinistro dell'operatore corrisponde a quella dei dati sul lato destro.

    • Quando la corrispondenza riesce, le variabili a sinistra vengono legate ai valori a destra.

    • Usare un underscore, _, ci permette di ignorare i valori in quelle posizioni.

      {:ok, number, _} = {:ok, 5, [4.5, 6.3]}
      number
      # => 5 is bound to this variable
      
    • L'operatore pin ^ permette di evitare di rilegare una variabile e di fare invece pattern matching sul suo valore esistente.

      number = 10
      {:ok, ^number, _} = {:ok, 5, [4.5, 6.3]}
      # => ** (MatchError) no match of right hand side value: {:ok, 5, [4.5, 6.3]}
      
  • Il pattern matching può avvenire anche nella testa di una clausola di funzione, così che solo gli argomenti che corrispondono al pattern chiamino la funzione.

  • È possibile legare variabili in un pattern match di una clausola di funzione.

    defmodule Example do
      def named_function(:a = atom_variable) do
        {atom_variable, 1}
      end
    end
    
    Example.named_function(:a)
    # => {:a, 1}
    # The first function clause matches, so it is invoked
    
    Example.named_function(:b)
    # => ** (FunctionClauseError) no function clause matching in Example.named_function/1
    
Modifica tramite GitHub Il collegamento si apre in una nuova finestra o scheda

Impara Pattern matching

La pratica è bloccata

Sblocca 10 altri esercizi per esercitarti su Pattern matching