如何在 Julia 中创建一个计算结果为 Expr 的 Expr?

How to create an Expr that evaluates to Expr in Julia?

我有一个代表 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)) 无法完成工作。

执行此操作的更简洁方法是什么?

你可以这样写:

Expr(:quote, x)

Expr(:block, ex)

:($ex;)

此外你还可以:

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

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

相同

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