Para partilhares código entre diferentes módulos Elixir dentro do mesmo projeto, precisas de referenciar o módulo externo pelo seu nome completo. Mas e se esse nome for demasiado longo ou confuso?
A forma especial alias permite-te encurtar ou alterar o nome pelo qual referencias um módulo externo. Quando é usada sem argumentos, reduz o nome do módulo ao seu último segmento, por exemplo, MyApp.Logger.Settings passa a ser Settings. Podes indicar um nome à tua escolha com a opção :as.
Normalmente, os aliases são adicionados no início da definição do módulo.
defmodule Square do
alias Integer, as: I
def area(a), do: I.pow(a, 2)
end
A forma especial import permite-te usar funções de um módulo externo sem escrever o nome do módulo.
Importar um módulo externo inteiro pode criar conflitos com funções locais que já existam. Para evitar isso, tens duas opções: :except e :only. Ambas esperam uma lista de palavras-chave, em que a chave é o nome da função e o valor é o número de argumentos dessa função.
Normalmente, as importações são adicionadas no início da definição do módulo.
defmodule Square do
import Integer, only: [pow: 2]
def area(a), do: pow(a, 2)
end
Aquele carro telecomandado que compraste recentemente transformou-se num passatempo completamente novo. Tens andado a organizar corridas de carros telecomandados.
Estavas quase a acabar de escrever um programa que permitiria correr simulações de corrida quando o teu gato saltou para cima do teclado e apagou algumas linhas de código. Agora o teu programa já não compila...
Race.__struct__/0 is undefined
Adiciona um alias para que o módulo NeedForSpeed.Race possa ser referido pelo nome mais curto Race.
Car.__struct__/0 is undefined
Adiciona um alias para que o módulo NeedForSpeed.RemoteControlCar possa ser referido pelo nome mais curto Car.
undefined function puts/1
A função puts/1 vem do módulo IO. Importa-a para a poderes usar sem referir o módulo.
undefined function default_color/0
As funções default_color/0, red/0, cyan/0 e green/0 vêm todas do módulo IO.ANSI. Estás a planear adicionar suporte para outras cores de carro, por isso queres importar o módulo todo. Infelizmente, a função color/1 do módulo IO.ANSI entra em conflito com uma das tuas funções locais. Importa o módulo IO.ANSI todo, exceto essa função.
Inscreve-te no Exercism para aprenderes e dominares Elixir com 58 conceitos168 exercícios, e mentoria humana real, tudo grátis.