モジュールのアトリビュート
cf. 14 モジュールのアトリビュート - Module attributes - Elixir
Elixir では、モジュールのアトリビュートは3つの目的に使われる。
- モジュールは注釈をつける
- 定数として利用
- コンパイルの際にモジュールの一時的な保管場所として利用
注釈
最もよく使われるのは2つ。これだけは覚えておこう。
- @moduledoc - モジュールのドキュメント
- @doc - このしるしの次にある関数やマクロのドキュメント
例えば、前に作った Math モジュールにドキュメントを追加してみよう。
defmodule Math do
@moduledoc """
Provides math-related functions.
## Example
iex> Math.sum(1, 2)
3
"""
@doc """
Calculates the sum of two numbers.
"""
def sum(a, b) do
a + b
end
end
これをコンパイルしてから iex を立ち上げると、モジュールが読み込まれ(カレントディレクトリにあるコンパイル済みファイルは自動的に読み込まれるのを思い出すこと)、ドキュメントを見ることができる。
^o^ > elixirc math.ex
^o^ > iex
Eshell V8.0 (abort with ^G)
Interactive Elixir (1.3.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> h Math
* Math
Provides math-related functions.
## Example
iex> Math.sum(1, 2)
3
iex(2)> h Math.sum
* def sum(a, b)
Calculates the sum of two numbers.
定数
Elixir ではしばしばアトリビュートを定数のように使う。
defmodule MyServer do
@initial_state %{host: "127.0.0.1", port: 3456}
IO.inspect @initial_state
end
^o^ > elixir myserver.exs
%{host: "127.0.0.1", port: 3456}
アトリビュートは関数の中でも読める。
defmodule MyServer do
@my_data 14
def first_data, do: @my_data
@my_data 13
def second_data, do: @my_data
end
IO.puts MyServer.first_data
IO.puts MyServer.second_data
^o^ > elixir myserver2.exs
14
13
一時的な貯蔵
なんか難しそうなので、パス。
