Elixir-aliases
エリクサー-エイリアス
ソフトウェアの再利用を容易にするために、Elixirは3つのディレクティブを提供します- alias、require および import 。 また、以下に要約されているuseと呼ばれるマクロを提供します-
次に、各ディレクティブについて詳しく理解しましょう。
エイリアス
エイリアスディレクティブを使用すると、任意のモジュール名のエイリアスを設定できます。 たとえば、ストリングモジュールにエイリアス 'Str' を指定する場合、次のように書くことができます-
上記のプログラムは、次の結果を生成します-
エイリアスは String モジュールに Str として与えられます。 これで、Strリテラルを使用して関数を呼び出すと、実際には String モジュールを参照します。 これは、非常に長いモジュール名を使用しており、現在のスコープ内で短いモジュール名に置き換える場合に非常に役立ちます。
注意-エイリアスは大文字で始まる必要があります。
エイリアスは、呼び出された lexical scope 内でのみ有効です。 たとえば、ファイルに2つのモジュールがあり、モジュールの1つ内でエイリアスを作成した場合、2番目のモジュールではそのエイリアスにアクセスできません。
組み込みモジュールにアクセスするために、ストリングやタプルなどの組み込みモジュールの名前を他のモジュールのエイリアスとして指定する場合、 "Elixir。" を先頭に追加する必要があります。 例えば、
上記のプログラムを実行すると、次の結果が生成されます-
要求する
Elixirは、メタプログラミング(コードを生成するコードの記述)のメカニズムとしてマクロを提供します。
マクロは、コンパイル時に実行および展開されるコードの塊です。 つまり、マクロを使用するには、コンパイル中にそのモジュールと実装が使用可能であることを保証する必要があります。 これは require ディレクティブで行われます。
上記のプログラムが実行されると、次の結果が生成されます-
Elixirでは、 Integer.is_odd は*マクロ*として定義されています。 このマクロはガードとして使用できます。 つまり、 Integer.is_odd を呼び出すには、Integerモジュールが必要です。
今回は、プログラムが実行され、 true として出力が生成されます。
一般に、モジュールは、そのモジュールで使用可能なマクロを使用する場合を除き、使用する前に必要ありません。 ロードされなかったマクロを呼び出そうとすると、エラーが発生します。 エイリアスディレクティブと同様に、_requireもレキシカルスコープであることに注意してください。 マクロについては、後の章で詳しく説明します。
インポート
この場合、リストから重複した関数(引数リストの長さ2)のみをインポートしています。 *:only *はオプションですが、指定されたモジュールのすべての機能を名前空間内にインポートしないようにするために、その使用をお勧めします。 *:except *は、関数のリストを除くモジュール内のすべてをインポートするためのオプションとして指定することもできます。
importもrequireおよびaliasディレクティブと同じように* Lexicallyスコープ*されていることに注意してください。 また、モジュールを「インポート」することも「必須」であることに注意してください*。
use
ディレクティブではありませんが、 use は require と密接に関連するマクロであり、現在のコンテキストでモジュールを使用できます。 useマクロは、外部機能を現在の字句スコープ(多くの場合モジュール)に取り込むために、開発者によって頻繁に使用されます。 例を通してuseディレクティブを理解しましょう-
使用は、上記を変換するマクロです-