【发布时间】:2018-05-16 21:24:18
【问题描述】:
按照这个例子:
defmodule Greetify do
defmacro __using__(_) do
quote do
Module.register_attribute __MODULE__, :greet, accumulate: true,
persist: false
@before_compile Greetify
end
end
defmacro __before_compile__(env) do
greetings = Module.get_attribute(env.module, :greet)
for {name, age} <- greetings do
IO.puts "#{name} is #{age} years old"
end
end
end
是否可以定义在宏中使用的内部函数?
例如:
defmacro __before_compile__(env) do
greetings = Module.get_attribute(env.module, :greet)
say_greetings(greetings)
defp say_greetings(grettings) do
for {name, age} <- greetings do
IO.puts "#{name} is #{age} years old"
end
end
end
尝试这个编译器会抱怨函数 say_grettings 没有定义
那个例子来源http://elixir-recipes.github.io/metaprogramming/accumulating-annotations/
【问题讨论】: