小编phy*_*00d的帖子

为什么变量可以从#Julia Macro Name Mangling开始?

我只是学习宏而且我对变量名以#开头的可能性感到困惑,但这正是宏似乎成功做到的事情.例如,如果我想将变量设置为等于4:

macro testMacro(sym)
  esym = esc(sym)
  quote
    temp = 4
    $esym = temp
    return
  end
end
Run Code Online (Sandbox Code Playgroud)

然后

julia> macroexpand(:(@testMacro ?))
quote  # none, line 4:
    #132#temp = 4 # line 5:
    ? = #132#temp # line 6:
    return
end

julia> @testMacro ?

julia> ?
4
Run Code Online (Sandbox Code Playgroud)

请注意,temp变量名为#132#temp,我理解它将在REPL中进行评估.然而,这似乎是不可能的,因为整条生产线现在在技术上应该是一个评论.

如果我查看宏中的第一个表达式,我会得到一些我无法重现的东西.

julia> macroexpand(:(@testMacro ?)).args[2]
:(#132#temp = 4)

julia> ex = :(#132#temp = 4)


ERROR: syntax: incomplete: premature end of input
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我想我从根本上有两个问题.1.)如果可能,我如何定义一个以#开头的变量(甚至在表达式中)?2.)假设存在这样一个变量,julia如何设法不将其视为评论?

julia

4
推荐指数
1
解决办法
191
查看次数

标签 统计

julia ×1