【问题标题】:Julia metaprogramming return symbolJulia 元编程返回符号
【发布时间】: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


    【解决方案1】:

    您的函数返回符号函数的符号,因为您的 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
    

    【讨论】:

    • 在较新版本的 Julia 中,有 Base.Meta.quot 函数将其参数表达式包装到 Expr(:quote, expr) 中,就像这个答案中的示例一样。
    猜你喜欢
    • 2022-07-09
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2016-04-29
    • 2023-03-18
    相关资源
    最近更新 更多