如何创建一个在Julia中计算为Expr的Expr?
我有一个表示Expr的变量如何创建一个在Julia中计算为Expr的Expr?,julia,metaprogramming,Julia,Metaprogramming,我有一个表示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
,我想有一个函数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)
或
或
此外,您还可以:
Meta.parse(":($ex)")
这并不简单,但向您展示了Julia在源代码中出现时如何解析ex
,您可以看到它与Expr(:quote,ex)
相同
类似地,您可以检查
Meta.parse(($ex;)”==Expr(:block,ex)
还有Meta.quot
,它的计算结果也是Expr(:quote,x)
。
:($ex;)
Meta.parse(":($ex)")