【问题标题】:How to create an Expr that evaluates to Expr in Julia?如何在 Julia 中创建一个计算为 Expr 的 Expr?
【发布时间】:2018-11-20 21:24:12
【问题描述】:

我有一个代表 Expr 的变量 ex,我想要一个函数 exprwrap 从中创建一个 Expr,当评估时等于 ex

目前我实现如下:

ex = :(my + expr)

"Make an expression that when evaled returns the input ex."
function exprwrap(ex::Expr)
  ret = :(:(du + mmy))
  ret.args[1] = ex
  ret
end

eval(exprwrap(ex)) == ex

请记住,myexpr 未定义,因此 :(:($$ex)) 无法完成这项工作。

有什么更简洁的方法来做到这一点?

【问题讨论】:

    标签: julia metaprogramming


    【解决方案1】:

    你可以写:

    Expr(:quote, x)
    

    Expr(:block, ex)
    

    :($ex;)
    

    您还可以这样做:

    Meta.parse(":($ex)")
    

    这并不简单,而是向您展示了当 ex 出现在源代码中时,Julia 如何解析它,您可以看到它与 Expr(:quote, ex) 相同。

    同样你可以检查Meta.parse("($ex;)") == Expr(:block, ex)

    【讨论】:

    • 还有Meta.quot,也就是Expr(:quote, x)
    猜你喜欢
    • 1970-01-01
    • 2018-06-24
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多