【问题标题】:Julia expression with equality operator does not work具有相等运算符的 Julia 表达式不起作用
【发布时间】:2021-05-01 09:17:58
【问题描述】:

以下代码按预期工作:

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 expression eval metaprogramming


    【解决方案1】:

    == 是一个函数,所以你有:

    julia> dump(:(x==4))
    Expr
      head: Symbol call
      args: Array{Any}((3,))
        1: Symbol ==
        2: Symbol x
        3: Int64 4
    

    但是

    julia> dump(:(x=4))
    Expr
      head: Symbol =
      args: Array{Any}((2,))
        1: Symbol x
        2: 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
    

    【讨论】:

      猜你喜欢
      • 2017-03-05
      • 2015-06-22
      • 2021-06-04
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多