- リソースの再利用を容易にするための仕組みとして alias, require ,importがある
arias
defmodule Math do
# Math.Listはモジュール内であればListで呼ぶことができるようになる。
# 本来のListは ` Elixir.List ` でないと見えなくなる
alias Math.List, as: List
# alias Math.List as: を省略した場合は最後の部品の名前が自動でつく。左の場合は Listになるので上の例と等価
def plus(a, b) do
# 関数内にも書けるが、その場合のスコープは関数内になる
alias Math.List
# ...
end
def minus(a, b) do
# ...
end
end
require
- メタプロのための仕組みとしてmacroがある
- コンパイル時に実行されてコードが拡張される。
- requireを使ってMacroを使うことができる
- 後のchaptorで説明すると書いてあるのでここでは割愛
import
- 関数を簡単に使いたいときやMacroにアクセスしたいときはimportを使う
- 以下の例は Listモジュールのduplicateだけ使いたい場合
- , で区切って :only で指定すると指定した関数 / Macroだけを読み込む
- スコープはレキシカルなので読み込まれた場所から内側だけ
iex> import List, only: [duplicate: 2]
nil
iex> duplicate :ok, 3
[:ok, :ok, :ok]
# 対象のモジュールのMacro全てを読み込む
import Integer, only: :macros
# 対象のモジュールの関数全てを読み込む
import Integer, only: :functions
Aliases
# SringはElixir.Stringのaliasで、atomとして定義されている
iex> is_atom(String)
true
iex> to_string(String)
"Elixir.String"