我是一个刚开始学习宏的人,对于变量名称如何以#开头仍然感到困惑,但宏似乎确实可以成功地实现这一点。例如,如果我想将一个变量设置为4:
macro testMacro(sym)
esym = esc(sym)
quote
temp = 4
$esym = temp
return
end
end
那么
julia> macroexpand(:(@testMacro α))
quote # none, line 4:
#132#temp = 4 # line 5:
α = #132#temp # line 6:
return
end
julia> @testMacro α
julia> α
4
请注意,临时变量被命名为#132#temp,我理解它将像这样在REPL中评估。然而,这似乎是不可能的,因为整行现在在技术上应该是一个注释。
如果我查看宏内的第一个表达式,我会得到一些无法复制的东西。
julia> macroexpand(:(@testMacro α)).args[2]
:(#132#temp = 4)
julia> ex = :(#132#temp = 4)
ERROR: syntax: incomplete: premature end of input
这里发生了什么?我有两个基本问题。1.) 如果可能的话,如何定义以#开头的变量(甚至在表达式中)?2.) 假设存在这样的变量,julia如何不将其视为注释?