可以用defmacro __using__來給之用use的modue,module自動產生預設的method
或者新增新的keyword, 雖然非必要不建議新增太多自定的macro elixir的if else或者ExUnit都有用到
| defmodule Logger do | |
| defmacro log(msg) do | |
| if Application.get_env(:logger, :enabled) do | |
| quote do | |
| IO.puts("Logged message: #{unquote(msg)}") | |
| end | |
| end | |
| end | |
| end | |
| defmodule Example do | |
| require Logger | |
| def test do | |
| Logger.log("This is a log message") | |
| end | |
| end |
| defmodule Hello do | |
| defmacro __using__(opts) do | |
| greeting = Keyword.get(opts, :greeting, "Hi") | |
| quote do | |
| def hello(name), do: unquote(greeting) <> ", " <> name | |
| end | |
| end | |
| end |
| defmodule UseHello do | |
| use Hello, greeting: "Halo" | |
| @greeting "Hello" | |
| def greeting(name) do | |
| "#{@greeting} #{name}." | |
| end | |
| end |