Para compartilhar código entre diferentes módulos Elixir dentro do mesmo projeto, você precisa se referir ao módulo externo pelo nome completo. Mas e se esse nome for longo ou confuso demais?
A forma especial alias permite encurtar ou alterar o nome pelo qual você se refere a um módulo externo. Quando usada sem argumentos, ela reduz o nome do módulo ao seu último segmento, por exemplo, MyApp.Logger.Settings se torna Settings. Um nome personalizado pode ser especificado 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 usar funções de um módulo externo sem usar o nome do módulo.
Importar um módulo externo inteiro pode criar conflitos com funções locais existentes. Para evitar isso, há duas opções disponíveis: :except e :only. Ambas esperam uma keyword list, em que a chave é o nome da função e o valor é a aridade da função.
Normalmente, os imports são adicionados 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 carrinho de controle remoto que você comprou recentemente virou um hobby totalmente novo. Você tem organizado corridas de carrinhos de controle remoto.
Você estava quase terminando de escrever um programa que permitiria rodar simulações de corrida quando seu gato pulou em cima do seu teclado e apagou algumas linhas de código. Agora seu programa não compila mais...
Race.__struct__/0 is undefined
Adicione um alias para que o módulo NeedForSpeed.Race possa ser referenciado pelo nome mais curto Race.
Car.__struct__/0 is undefined
Adicione um alias para que o módulo NeedForSpeed.RemoteControlCar possa ser referenciado pelo nome mais curto Car.
undefined function puts/1
A função puts/1 vem do módulo IO. Importe-a para poder usá-la sem referenciar 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. Você está planejando adicionar suporte a outras cores de carro, então quer importar o módulo inteiro. Infelizmente, a função color/1 do módulo IO.ANSI entra em conflito com uma das suas funções locais. Importe todo o módulo IO.ANSI, exceto essa função.
Crie sua conta no Exercism para aprender e dominar Elixir com 58 conceitos168 exercícios e mentoria humana de verdade, tudo de graça.