Goal
alias、require、import、useの使い方を学ぶ。
Dev-Environment
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.5
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.5
Wait a minute
今更ですが、alias、require、import、useの違いを学びます。
それぞれ、どんな機能なのか把握すれば特段難しいこともないですね。
それぞれ、どんな機能なのか把握すれば特段難しいこともないですね。
Index
alias, require, import, use
|> alias
|> import
|> require
|> use
|> alias
|> import
|> require
|> use
alias
モジュールへ別名を付ける時に使います。
Exmaple:
defmodule AliasSample.Sample.Hoge do
...
end
defmodule AliasSample.Sample.Huge do
alias AliasSample.Sample.Hoge, as: Hoge
end
Note:
asオプションをなしで別名定義をすると、モジュール名の最後の部分が自動的に設定されます。
以下は同じ意味になります。
以下は同じ意味になります。
alias AliasSample.Sample.Hoge, as: Hoge == alias AliasSample.Sample.Hoge
import
他のモジュールにある関数やマクロを修飾名をつけないで呼び出す時に使います。
Exmaple:
iex> count([1,2,3])
** (RuntimeError) undefined function: count/1
iex> import Enum, only: [count: 1]
nil
iex> count([1,2,3])
3
Note:
onlyオプションを使えば特定の関数だけ対象にできる。
ない場合は、importしたモジュール全ての関数が対象になる。
ない場合は、importしたモジュール全ての関数が対象になる。
require
マクロを展開させる時に使います。
Exmaple:
defmodule RequireSample do
defmacro sample(arg1, arg2) do
quote do
...
end
end
end
iex> RequireSample.sample(arg1, arg2)
エラーが発生し、requireしろとメッセージが表示される。
iex> require RequireSample
nil
iex> RequireSample.sample(arg1, arg2)
正常に実行される。
Note:
マクロを使うためには、コンパイル時にそのモジュールと実装が用意されている必要がある。
use
モジュールのusingを展開させます。
Exmaple:
defmodule UsingSample do
defmacro __using__(_options) do
quote do
...
import unquote(__MODULE__)
...
end
end
...
end
defmodule UseSample do
use UsingSample
end
上記の場合、UsingSample.using/1がUseSampleのuseしている場所で展開されます。
Speaking to oneself
散々ここら辺の機能を使っておいて…よく分かってなかったので、
簡単にまとめてみました。
簡単にまとめてみました。