我正在试图找出如何使用引用块,在评估时,返回一个符号。请参阅下面的示例。
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
答案 0 :(得分:5)
你的函数返回符号函数的符号,因为qoute中的最后一个符号没有前面的$。第二个问题是你想要返回它自己的符号,这需要你在引号内引用类似于这个问题的引号 Julia: How do I create a macro that returns its argument?
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