Как создать Expr, который оценивает Expr в Юлии? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть переменная ex, которая представляет собой Expr, я хочу иметь функцию 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)) не выполняет работу.

Какой более чистый способ сделать это

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете написать:

Expr(:quote, x)

или

Expr(:block, ex)

или

:($ex;)

Дополнительно вы можете сделать:

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

что не просто, но показывает вам, как Джулия анализирует ex, когда он появляется в исходном коде, и вы видите, что он такой же, как Expr(:quote, ex).

Аналогично, вы можете проверить, что Meta.parse("($ex;)") == Expr(:block, ex).

...