Help us understand the problem. What is going on with this article?

alias, require, importの違いを理解してみる

More than 3 years have passed since last update.

英語が読める方はこちらを参照のほど
elixir - alias, require and import

alias

モジュールに別名を割り当てることができる。

ex.

example.ex
defmodule Math do
  # Math.ListモジュールをListという名称に置き換え
  alias Math.List, as: List

  List.flatten             #=> Math.List.flanttenをList.flanttenとして呼び出せたり
  Elixir.List.flatten      #=> Elixirの名前空間から呼び出せたり
  Elixir.Math.List.flatten #=> Elixirの名前空間からだと置き換え元のMath.Listを呼び出せたりもする
end

またasを使わない場合は、自動的に名称が割り当てられる。

ex.

example.ex
# 最後のListの部分が割り当てられる
# つまり下記はalias Math.List, as: Listと同じ
alias Math.List

aliasはレキシカルスコープなので、特定の関数内だけのエイリアスを設定できる。

ex.

example.ex
defmodule Math do
  def plus(a, b) do
    # 下記のエイリアスはplus関数の中でのみ有効
    alias Math.List
  end

  def minus(a, b) do
    # ...
  end
end

require

モジュールを利用可能にする。

ex.

iex> Integer.is_odd(3)
** (CompileError) iex:1: you must require Integer before invoking the macro Integer.is_odd/1
iex> require Integer
nil
iex> Integer.is_odd(3)
true

モジュール内のマクロを利用するにはrequireを使い、モジュールを読み込むことが必要となる。
aliasと同じくrequireもレキシカルスコープである。

import

モジュールから他のモジュールの関数やマクロにアクセスするために使用。

ex.

# Listのduplicate関数のみ呼び出せるようにしている
iex> import List, only: [duplicate: 2]
nil
iex> duplicate :ok, 3
[:ok, :ok, :ok]

また、exept:を使えば指定した以外の関数・マクロが呼び出せるようになり、
only: macroだと全てのマクロ、only: functionsだと全ての関数が呼び出せるようになります。

単純にimport Listと呼び出した場合は、Listモジュール内の関数・マクロ全てが呼び出せます。

--

以上、理解を深めるために書いてみました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away