[解決済み] Elixir: useとimportの違い
2022-04-27 13:36:19
質問
とはどう違うのですか?
use
と
import
?
use は、与えられたモジュールを現在のコンテキストで使用するためのシンプルなメカニズムです。
https://hexdocs.pm/elixir/Kernel.SpecialForms.html#import/2
他のモジュールから関数やマクロをインポートする
一つ違うようです。
import
は、特定の関数/マクロを選ぶことができるのに対して
use
はすべてを取り込みます。
他に違いはありますか?どのような場合にどちらを使うのでしょうか?
解決方法は?
import Module
のすべての関数とマクロをもたらします。
Module
を名前なしであなたのモジュールに取り込みます。
require Module
のマクロを使用することができます。
Module
が、インポートされません。(関数
Module
は常に名前空間的に利用可能です)。
use Module
第一
requires
モジュールを呼び出し、その後に
__using__
マクロを
Module
.
次のように考える。
defmodule ModA do
defmacro __using__(_opts) do
IO.puts "You are USING ModA"
end
def moda() do
IO.puts "Inside ModA"
end
end
defmodule ModB do
use ModA
def modb() do
IO.puts "Inside ModB"
moda() # <- ModA was not imported, this function doesn't exist
end
end
としてコンパイルされません。
ModA.moda()
にインポートされていません。
ModB
.
以下はコンパイルされますが。
defmodule ModA do
defmacro __using__(_opts) do
IO.puts "You are USING ModA"
quote do # <--
import ModA # <--
end # <--
end
def moda() do
IO.puts "Inside ModA"
end
end
defmodule ModB do
use ModA
def modb() do
IO.puts "Inside ModB"
moda() # <-- all good now
end
end
のときのように
use
d
ModA
を生成していました。
import
の中に挿入されたステートメントは
ModB
.
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン