St

Struct in Elixir

21 esercizi

Informazioni su Struct

Le struct sono delle mappe speciali con un insieme definito di chiavi.

  • Le struct forniscono controlli in fase di compilazione e valori predefiniti.
  • Una struct prende il nome dal modulo in cui è definita.
  • Per definire una struct si usa il costrutto defstruct.
    • Il costrutto di solito segue immediatamente la definizione del modulo.
  • defstruct accetta una lista di atomi (per valori predefiniti nil) oppure liste di keyword (per valori predefiniti specificati).
    • I campi senza valore predefinito devono precedere i campi con un valore predefinito.
defmodule Plane do
  defstruct [:engine, wings: 2]
end

plane = %Plane{}
# => %Plane{engine: nil, wings: 2}

Accesso ai campi e aggiornamento

  • La maggior parte delle funzioni che lavorano con le mappe funziona anche con le struct.

  • Si consiglia di usare l'operatore di accesso statico . per accedere ai campi di una struct.

  • Ottenere/recuperare i valori dei campi:

    plane = %Plane{}
    plane.engine
    # => nil
    Map.fetch(plane, :wings)
    # => {:ok, 2}
    
  • Aggiornare i valori dei campi

    plane = %Plane{}
    %{plane | wings: 4}
    # => %Plane{engine: nil, wings: 4}
    

Obbligare all'inizializzazione dei valori dei campi

  • L'attributo di modulo @enforce_keys crea un controllo a runtime che i campi specificati devono essere inizializzati a un valore non nil quando viene creata la struct.
  • @enforce_keys è seguito da una lista delle chiavi dei campi (che sono atomi).
  • Se una chiave obbligatoria non viene inizializzata, viene generato un errore.
defmodule User do
  @enforce_keys [:username]
  defstruct [:username]
end

%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]
Modifica tramite GitHub Il collegamento si apre in una nuova finestra o scheda

Impara Struct

La pratica è bloccata

Sblocca 9 altri esercizi per esercitarti su Struct