Julia元编程返回符号

Julia元编程返回符号,julia,Julia,我试图找出如何让引号块在计算时返回一个符号。请参见下面的示例 function func(symbol::Symbol) quote z = $symbol symbol end end a = 1 eval(func(:a)) #this returns :symbol. I would like it to return :a z 由于qoute中的最后一个符号前面没有$,因此函数返回的符号位于symbol函数的位置。第二个问题是您想返回符号it self,这要求

我试图找出如何让引号块在计算时返回一个符号。请参见下面的示例

function func(symbol::Symbol)
  quote
    z = $symbol
    symbol
  end
end

a = 1
eval(func(:a)) #this returns :symbol. I would like it to return :a
z

由于qoute中的最后一个符号前面没有$,因此函数返回的符号位于symbol函数的位置。第二个问题是您想返回符号it self,这要求您在引号内做一个类似于此问题的引号


在Julia的较新版本中,有一个
Base.Meta.quot
函数,它将其参数表达式包装成一个
Expr(:quote,Expr)
,就像这个答案中的示例一样。
function func(s::Symbol)
   quote
        z = $s
        $(Expr(:quote, s))  # This creates an expresion inside the quote
   end
end
a = 1
eval(func(:a)) #this returns :a
z