Elixir-モジュール

Elixirでは、いくつかの機能をモジュールにグループ化します。文字列モジュール、ビット単位モジュール、タプルモジュールなど、前の章ですでにさまざまなモジュールを使用しました。

Elixirで独自のモジュールを作成するために、 defmodule大きい。私たちは使用しますdef そのモジュールで関数を定義するマクロ-

defmodule Math do
   def sum(a, b) do
      a + b
   end
end

次のセクションでは、例のサイズが長くなるため、すべてをシェルに入力するのは難しい場合があります。Elixirコードをコンパイルする方法とElixirスクリプトを実行する方法を学ぶ必要があります。

コンパイル

モジュールをファイルに書き込んでコンパイルして再利用できるようにすると、常に便利です。次の内容のmath.exという名前のファイルがあると仮定します-

defmodule Math do
   def sum(a, b) do
      a + b
   end
end

コマンド-を使用してファイルをコンパイルできますelixirc

$ elixirc math.ex

これにより、という名前のファイルが生成されます Elixir.Math.beam定義されたモジュールのバイトコードが含まれています。始めたらiexここでも、モジュール定義が使用可能になります(iexがバイトコードファイルと同じディレクトリで開始されている場合)。例えば、

IO.puts(Math.sum(1, 2))

上記のプログラムは次の結果を生成します-

3

スクリプトモード

Elixirファイル拡張子に加えて .ex、Elixirもサポートしています .exsスクリプト用のファイル。Elixirは両方のファイルをまったく同じように扱いますが、唯一の違いは目的にあります。.ex ファイルは、.exsファイルが使用されている間にコンパイルされることを意図しています。 scripting。実行されると、両方の拡張機能がコンパイルされ、モジュールがメモリにロードされます。.ex ファイルは、バイトコードを.beamファイルの形式でディスクに書き込みます。

たとえば、実行したい場合 Math.sum 同じファイルで、次のように.exsを使用できます-

Math.exs

defmodule Math do
   def sum(a, b) do
      a + b
   end
end
IO.puts(Math.sum(1, 2))

Elixirコマンドを使用して実行できます-

$ elixir math.exs

上記のプログラムは次の結果を生成します-

3

ファイルはメモリにコンパイルされて実行され、結果として「3」が出力されます。バイトコードファイルは作成されません。

モジュールの入れ子

モジュールはElixirにネストできます。この言語の機能は、コードをより適切に整理するのに役立ちます。ネストされたモジュールを作成するには、次の構文を使用します-

defmodule Foo do
   #Foo module code here
   defmodule Bar do
      #Bar module code here
   end
end

上記の例では、2つのモジュールを定義します。 Foo そして Foo.Bar。2番目はとしてアクセスできますBar 内部 Fooそれらが同じ字句スコープ内にある限り。後で、Bar モジュールをFooモジュール定義の外に移動するか、フルネーム(Foo.Bar)で参照するか、エイリアスの章で説明されているエイリアスディレクティブを使用してエイリアスを設定する必要があります。

Note− Elixirでは、言語がすべてのモジュール名をアトムに変換するため、Foo.Barモジュールを定義するためにFooモジュールを定義する必要はありません。チェーン内のモジュールを定義せずに、任意にネストされたモジュールを定義できます。たとえば、次のように定義できますFoo.Bar.Baz 定義せずに Foo または Foo.Bar