Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建一个在Julia中计算为Expr的Expr?_Julia_Metaprogramming - Fatal编程技术网

如何创建一个在Julia中计算为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)) ==

我有一个表示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)

此外,您还可以:

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


类似地,您可以检查
Meta.parse(($ex;)”==Expr(:block,ex)

还有
Meta.quot
,它的计算结果也是
Expr(:quote,x)
:($ex;)
Meta.parse(":($ex)")