Per condividere codice tra moduli Elixir diversi all'interno dello stesso progetto, devi fare riferimento al modulo esterno con il suo nome completo. Ma cosa succede se quel nome è troppo lungo o poco chiaro?
La forma speciale alias ti permette di abbreviare o cambiare il nome con cui fai riferimento a un modulo esterno. Se usata senza argomenti, riduce il nome del modulo al suo ultimo segmento, ad esempio MyApp.Logger.Settings diventa Settings. Puoi specificare un nome personalizzato con l'opzione :as.
Di solito gli alias si aggiungono all'inizio della definizione del modulo.
defmodule Square do
alias Integer, as: I
def area(a), do: I.pow(a, 2)
end
La forma speciale import ti permette di usare le funzioni di un modulo esterno senza usare il nome del modulo.
Importare un intero modulo esterno potrebbe creare conflitti con le funzioni locali esistenti. Per evitarlo, sono disponibili due opzioni: :except e :only. Entrambe richiedono una keyword list, in cui la chiave è il nome della funzione e il valore è l'arità della funzione.
Di solito gli import si aggiungono all'inizio della definizione del modulo.
defmodule Square do
import Integer, only: [pow: 2]
def area(a), do: pow(a, 2)
end
Quell'auto radiocomandata che hai comprato di recente è diventata un hobby tutto nuovo. Hai organizzato gare di auto radiocomandate.
Stavi quasi finendo di scrivere un programma che avrebbe permesso di eseguire le simulazioni delle gare, quando il tuo gatto è saltato sulla tastiera e ha cancellato alcune righe di codice. Ora il programma non si compila più...
Race.__struct__/0 is undefined
Aggiungi un alias in modo che il modulo NeedForSpeed.Race possa essere indicato con il nome più breve Race.
Car.__struct__/0 is undefined
Aggiungi un alias in modo che il modulo NeedForSpeed.RemoteControlCar possa essere indicato con il nome più breve Car.
undefined function puts/1
La funzione puts/1 proviene dal modulo IO. Importala per poterla usare senza fare riferimento al modulo.
undefined function default_color/0
Le funzioni default_color/0, red/0, cyan/0 e green/0 provengono tutte dal modulo IO.ANSI. Hai in programma di aggiungere il supporto per altri colori di auto, quindi vuoi importare l'intero modulo. Purtroppo, la funzione color/1 del modulo IO.ANSI è in conflitto con una delle funzioni locali. Importa l'intero modulo IO.ANSI tranne quella funzione.
Iscriviti a Exercism per imparare e padroneggiare Elixir con 58 concetti168 esercizi e il mentoring di persone reali, tutto gratis.