21. マクロの例
defmodule
Mod do
defmacro twice(cmd)
quote
.puts
unquote(cmd)
.puts
unquote(cmd)
do
do
IO "1回目" # quote(code) -> AST
# unquote(AST) -> code
IO "2回目" # unquoteでASTをコードに埋め込む
# quoteでASTにして返す
end
end
end
25. もっと頑張ると
defmacro a_macro(arg, block)
a_macro
do: do
:
#=> ["first", "second"]
# 煮るなり焼くなり
:
end
"arg" do
"first"
"second"
end
26. ここまでくれば
defmacro presentation( block)
presentation
slide
slide
do: do
:
#=> [{:slide, [], [...]}, {:slide, [], [...]}, ... ]
:
end
do
"Agenda" do
:
end
"Intro" do
:
end
end