Dies ist üblich Elixier:Elixir: Verwendung Makro im Körper des gleichen Moduls, das es definiert
defmodule Fizz do
defmacro asdf, do: IO.puts("asdf")
end
defmodule Buzz do
require Fizz
Fizz.asdf
end
Doch obwohl Sie Makros im gleichen Kontext wie verweisen können:
defmodule Fizz do
# ...
defmacro asdf_qwer, do: asdf && IO.puts("qwer")
end
.. . Sie können Makros im Körper des gleichen Moduls nicht verweisen, die sie definiert:
defmodule Fizz do
defmacro asdf, do: IO.puts("asdf")
asdf
end
Dies erhöht undefined function asdf/0
.
Gibt es einen Workaround für dieses "Problem"? Manchmal möchte ich Makros verwenden, um einige Boilerplate aus dem Modul, an dem ich arbeite, zu entfernen, und die Funktionalität dieses Makros kann spezifisch genug sein, um es nicht in ein anderes Modul zu integrieren.