h unquote
說它「從宏內部引用給定的表達式」。爲什麼`unquote`可以在宏外調用?
但是,我剛剛看到一種方式,unquote
可以在宏外使用。
defmodule Example do
x = 4
def foo do
unquote(x)
end
x = 5
def bar do
x = 4
"#{unquote(x)}, #{x}"
end
end
IO.puts Example.foo #=> 4
IO.puts Example.bar #=> "5, 4"
這是相同的unquote
,還是不同的?這是一個功能還是錯誤? (它似乎與"temporary storage" purpose of module attributes重疊。)
爲什麼我可以撥打unquote
以外的宏quote
?