Para compartir código entre distintos módulos de Elixir dentro de un mismo proyecto, necesitas referirte al módulo externo por su nombre completo. Pero, ¿qué pasa si ese nombre es demasiado largo o confuso?
La forma especial alias te permite acortar o cambiar el nombre con el que te refieres a un módulo externo. Cuando se usa sin argumentos, reduce el nombre del módulo a su último segmento, por ejemplo, MyApp.Logger.Settings pasa a ser Settings. Puedes especificar un nombre personalizado con la opción :as.
Por lo general, los alias se agregan al inicio de la definición del módulo.
defmodule Square do
alias Integer, as: I
def area(a), do: I.pow(a, 2)
end
La forma especial import te permite usar funciones de un módulo externo sin usar el nombre del módulo.
Importar un módulo externo completo puede crear conflictos con las funciones locales que ya existen. Para evitarlo, tienes dos opciones disponibles: :except y :only. Ambas esperan una lista de palabras clave, donde la clave es el nombre de la función y el valor es la aridad de la función.
Por lo general, las importaciones se agregan al inicio de la definición del módulo.
defmodule Square do
import Integer, only: [pow: 2]
def area(a), do: pow(a, 2)
end
Ese auto a control remoto que compraste hace poco se convirtió en todo un pasatiempo nuevo. Has estado organizando carreras de autos a control remoto.
Estabas casi terminando de escribir un programa que permitiera ejecutar simulaciones de carreras cuando tu gato saltó sobre tu teclado y borró algunas líneas de código. Ahora tu programa ya no compila...
Race.__struct__/0 is undefined
Agrega un alias para que se pueda hacer referencia al módulo NeedForSpeed.Race con el nombre más corto Race.
Car.__struct__/0 is undefined
Agrega un alias para que se pueda hacer referencia al módulo NeedForSpeed.RemoteControlCar con el nombre más corto Car.
undefined function puts/1
La función puts/1 viene del módulo IO. Impórtala para poder usarla sin hacer referencia al módulo.
undefined function default_color/0
Las funciones default_color/0, red/0, cyan/0 y green/0 vienen todas del módulo IO.ANSI. Tienes planeado agregar soporte para otros colores de auto, así que quieres importar todo el módulo. Lamentablemente, la función color/1 del módulo IO.ANSI entra en conflicto con una de tus funciones locales. Importa todo el módulo IO.ANSI excepto esa función.
Regístrate en Exercism para aprender y dominar Elixir con 58 conceptos168 ejercicios y mentoría humana real, todo gratis.