我有一个表示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))
不能完成工作。
什么是更干净的方法?
答案 0 :(得分:3)
您可以写:
Expr(:quote, x)
或
Expr(:block, ex)
或
:($ex;)
您还可以:
Meta.parse(":($ex)")
这并不简单,但是向您展示了Julia在源代码中出现时如何解析ex
,并且您可以看到它与Expr(:quote, ex)
相同。
同样,您可以检查Meta.parse("($ex;)") == Expr(:block, ex)
。