【发布时间】:2023-03-18 00:44:01
【问题描述】:
我试图弄清楚如何让一个引用块在评估时返回一个符号。请参阅下面的示例。
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
【问题讨论】:
标签: 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
【问题讨论】:
标签: julia
您的函数返回符号函数的符号,因为您的 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
【讨论】:
Base.Meta.quot 函数将其参数表达式包装到 Expr(:quote, expr) 中,就像这个答案中的示例一样。