带有相等运算符的Julia表达式不起作用
以下代码按预期工作:带有相等运算符的Julia表达式不起作用,julia,expression,eval,metaprogramming,Julia,Expression,Eval,Metaprogramming,以下代码按预期工作: x = 1 exp = Expr(:(=), :x, 4) # :(x = 4) eval(exp) # x is now equal to 4 as expected 以下代码失败: x = 1 exp = Expr(:(==), :x, 4) # Got :($(Expr(:(==), :x, 4))) instead of the expected :(x == 4) eval(exp) # ER
x = 1
exp = Expr(:(=), :x, 4) # :(x = 4)
eval(exp) # x is now equal to 4 as expected
以下代码失败:
x = 1
exp = Expr(:(==), :x, 4) # Got :($(Expr(:(==), :x, 4))) instead of the expected :(x == 4)
eval(exp) # ERROR: syntax: invalid syntax (== (outerref x) 4)
=
是一个函数,因此您有:
julia> dump(:(x==4))
Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol ==
2: Symbol x
3: Int64 4
但是
因此,特别是以下工作:
julia> x = 1
1
julia> exp = Expr(:call, :(==), :x, 4)
:(x == 4)
julia> dump(exp)
Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol ==
2: Symbol x
3: Int64 4
julia> eval(exp)
false
=
是一个函数,因此您有:
julia> dump(:(x==4))
Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol ==
2: Symbol x
3: Int64 4
但是
因此,特别是以下工作:
julia> x = 1
1
julia> exp = Expr(:call, :(==), :x, 4)
:(x == 4)
julia> dump(exp)
Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol ==
2: Symbol x
3: Int64 4
julia> eval(exp)
false