【发布时间】:2019-07-01 17:18:59
【问题描述】:
我刚刚开始学习 elixir 中的宏。我目前正在阅读元编程长生不老药书。
在本书的开头有一个示例,说明如何创建一个名为 say 的宏。该宏将采用5 + 5 之类的表达式并返回"5 plus 5 is 10" 字符串...
defmacro say({:+, _, [lhs, rhs]}) do
quote do
lhs = unquote(lhs)
rhs = unquote(rhs)
result = lhs + rhs
IO.puts "#{lhs} plus #{rhs} is #{result}"
result
end
end
我想知道为什么我们在定义自己的宏时需要使用quote 和unquote 宏?
defmacro say({:+, _, [lhs, rhs]}) do
result = lhs * rhs
IO.puts "#{lhs} plus #{rhs} is #{result}"
result
end
宏的第二个版本不会返回完全相同的答案吗?
我对宏的工作方式有什么误解吗?
【问题讨论】:
标签: int elixir metaprogramming