もやもやエンジニア

IT系のネタで思ったことや技術系のネタを備忘録的に綴っていきます。フロント率高め。

Elixir 入門 その12 - alias, require and import

  • リソースの再利用を容易にするための仕組みとして alias, require ,importがある

arias

  • モジュールにaliasをつけることができる
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

  • Aliasの実態はatomになる。
# SringはElixir.Stringのaliasで、atomとして定義されている
iex> is_atom(String)
true

iex> to_string(String)
"Elixir.String"