1
use
と@before_compile
の違いは何ですか?どちらも現在のモジュールに何らかのコードを注入するために使用できます。`use`と` @ before_compile`の違いは何ですか?
use
と@before_compile
の違いは何ですか?どちらも現在のモジュールに何らかのコードを注入するために使用できます。`use`と` @ before_compile`の違いは何ですか?
一つの主な違いは、単に、__using__
内のコードが呼び出され、戻り値がが呼ばれながら、できるだけ早くあなたがモジュール内use
呼び出しとして注入し、直接モジュール内のすべてのコードの後に注入された戻り値が実行されていることですモジュールがコンパイルされる前に
違いを実証するための簡単なプログラム:
defmodule When do
defmacro __using__(_) do
IO.inspect :using
__CALLER__.module |> Module.definitions_in |> IO.inspect
quote do end
end
defmacro __before_compile__(_) do
IO.inspect :before_compile
__CALLER__.module |> Module.definitions_in |> IO.inspect
quote do end
end
end
defmodule Main do
@before_compile When
use When
IO.puts "added `@before_compile` and `use`"
def add(x, y), do: x + y
end
出力:すべてのテストが、それは可能ExUnitランナーが取得できるようにすること返す関数を定義するための
:using
[]
added `@before_compile` and `use`
:before_compile
[add: 2]
ExUnit uses @before_compile
とすべてのテストを実行します。