可以用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 |