【发布时间】:2021-05-01 07:29:52
【问题描述】:
对以下表达式使用 eval 很简单:
exp = :(x + 1)
x = 1
eval(exp)
我不知道如何评估以下涉及转义变量的表达式:
x = 1
exp = :($(esc(x)) + 1)
exp 的转储给出:
head: Symbol call
args: Array{Any}((3,))
1: Symbol +
2: Expr
head: Symbol escape
args: Array{Any}((1,))
1: Int64 1 <-- current value of x
3: Int64 1
我想出了如何像这样替换转义的变量值:
exp.args[2].args[1] = 2
dump(exp) 现在是:
head: Symbol call
args: Array{Any}((3,))
1: Symbol +
2: Expr
head: Symbol escape
args: Array{Any}((1,))
1: Int64 2 <-- Replaced value
3: Int64 1
我遗漏了最后一步,尽管搜索了文档和 stackoverflow,但我还是找不到。
【问题讨论】:
标签: julia expression eval metaprogramming