如何在 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
请记住,my
和 expr
未定义,因此 :(:($$ex))
无法完成工作。
执行此操作的更简洁方法是什么?
你可以这样写:
Expr(:quote, x)
或
Expr(:block, ex)
或
:($ex;)
此外你还可以:
Meta.parse(":($ex)")
这并不简单,但向您展示了 Julia 在源代码中出现时如何解析 ex
,您可以看到它与 Expr(:quote, ex)
.
相同
同样你可以检查 Meta.parse("($ex;)") == Expr(:block, ex)
.
我有一个代表 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
请记住,my
和 expr
未定义,因此 :(:($$ex))
无法完成工作。
执行此操作的更简洁方法是什么?
你可以这样写:
Expr(:quote, x)
或
Expr(:block, ex)
或
:($ex;)
此外你还可以:
Meta.parse(":($ex)")
这并不简单,但向您展示了 Julia 在源代码中出现时如何解析 ex
,您可以看到它与 Expr(:quote, ex)
.
同样你可以检查 Meta.parse("($ex;)") == Expr(:block, ex)
.