Pour partager du code entre différents modules Elixir au sein d'un même projet, tu dois référencer le module externe par son nom complet. Mais que faire si ce nom est trop long ou prête à confusion ?
La forme spéciale alias permet de raccourcir ou de changer le nom par lequel tu références un module externe. Utilisée sans argument, elle réduit le nom du module à son dernier segment : par exemple, MyApp.Logger.Settings devient Settings. Un nom personnalisé peut être précisé avec l'option :as.
En général, les alias sont ajoutés au début de la définition du module.
defmodule Square do
alias Integer, as: I
def area(a), do: I.pow(a, 2)
end
La forme spéciale import permet d'utiliser les fonctions d'un module externe sans écrire le nom du module.
Importer un module externe entier peut créer des conflits avec les fonctions locales existantes. Pour éviter cela, deux options sont disponibles : :except et :only. Toutes deux attendent une liste de mots-clés, où la clé est le nom de la fonction et la valeur son arité.
En général, les imports sont ajoutés au début de la définition du module.
defmodule Square do
import Integer, only: [pow: 2]
def area(a), do: pow(a, 2)
end
Cette voiture télécommandée que tu as achetée récemment est devenue un tout nouveau passe-temps. Tu organises des courses de voitures télécommandées.
Tu avais presque fini d'écrire un programme qui devait permettre de lancer des simulations de course quand ton chat a sauté sur ton clavier et supprimé quelques lignes de code. Maintenant, ton programme ne compile plus...
Race.__struct__/0 is undefined
Ajoute un alias pour que le module NeedForSpeed.Race puisse être référencé par le nom plus court Race.
Car.__struct__/0 is undefined
Ajoute un alias pour que le module NeedForSpeed.RemoteControlCar puisse être référencé par le nom plus court Car.
undefined function puts/1
La fonction puts/1 vient du module IO. Importe-la pour pouvoir l'utiliser sans référencer le module.
undefined function default_color/0
Les fonctions default_color/0, red/0, cyan/0 et green/0 viennent toutes du module IO.ANSI. Tu prévois d'ajouter la prise en charge d'autres couleurs de voiture, donc tu veux importer tout le module. Malheureusement, la fonction color/1 du module IO.ANSI entre en conflit avec l'une de tes fonctions locales. Importe tout le module IO.ANSI sauf cette fonction.
Inscris-toi sur Exercism pour apprendre et maîtriser Elixir avec 58 concepts168 exercices, et un vrai mentorat humain, le tout gratuitement.