Elixirではネストされたモジュールとその親の間には何の関係もないので,ネストしたモジュール内でそのモジュール自身を参照するときは,いちいち頭からモジュール名を全部打っていかないといけません.
defmodule Game.User do
defstruct [:name, :level]
def new(name, level) do
# %User{...} ではダメ
%Game.User{name: name, level: level}
end
end
これを解決するために,以下のようにモジュール内で自分自身へのエイリアスを張ることができます.
defmodule Game.User do
alias Game.User
defstruct [:name, :level]
def new(name, level) do
%User{name: name, level: level}
end
end
こうすれば,単にUserと書くだけでGame.Userにアクセスできるので,少しだけ書くのが楽になります.
これをもう少しだけ楽に書くtipsとして、以下のようなものがよく使われているようです.
defmodule Game.User do
alias __MODULE__
defstruct [:name, :level]
def new(name, level) do
%User{name: name, level: level}
end
end
Game.User内では__MODULE__ == Game.Userなので,これは先ほどのalias Game.Userと意味的に同じになり,UserがGame.Userの意味で使えるようになるという理屈です.