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
一時的な貯蔵
なんか難しそうなので、パス。