Я только начал изучать макросы в эликсире.В настоящее время я читаю книгу metaprogramming-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
Разве вторая версия макроса не возвращает тот же самый ответ?
Есть ли что-то, что я неправильно понимаю, как работают макросы?