以可读格式打印 Julia 表达式

问题描述 投票:0回答:1

我正在与 Julia 合作,并使用

Expr
类型以编程方式表示表达式。当我打印表达式时,我得到如下示例程序的输出:

$(Expr(:toplevel, :(v1 = 1), :(v2 = 2), :(v3 = v3 + v2 + v1), :(v4 = v3), :(module m1
  v3 = v3 + v4
  v6 = 6
  v6 = v3 + v5 + v6
  function f1()
      v7 = v7 + v5 + v3
  end
  end)))

但是,我希望输出更易于理解,例如:

v1 = 1
v2 = 2
v3 = v3 + v2 + v1
v4 = v3

module m1
v3 = v3 + v4
v6 = 6
v6 = v3 + v5 + v6

function f1()
  v7 = v7 + v5 + v3
end

end

有没有办法自定义 Julia 表达式的打印来实现这一点?我希望输出的格式更易于阅读和理解。任何有关如何实现这一目标的指导或示例将不胜感激。

printing julia expression
1个回答
0
投票

您可以通过将

:toplevel
更改为
:block
(表达式
head
quote ... end
)来“欺骗”Julia 显示此表达式:

julia> e = Expr(:toplevel, :(v1 = 1), :(v2 = 2), :(v3 = v3 + v2 + v1), :(v4 = v3), :(module m1
         v3 = v3 + v4
         v6 = 6
         v6 = v3 + v5 + v6
         function f1()
             v7 = v7 + v5 + v3
         end
         end));

julia> e.head = :block
:block

julia> e
quote
    v1 = 1
    v2 = 2
    v3 = v3 + v2 + v1
    v4 = v3
    module m1
    #= REPL[53]:1 =#
    #= REPL[53]:2 =#
    v3 = v3 + v4
    #= REPL[53]:3 =#
    v6 = 6
    #= REPL[53]:4 =#
    v6 = v3 + v5 + v6
    #= REPL[53]:5 =#
    function f1()
        #= REPL[53]:5 =#
        #= REPL[53]:6 =#
        v7 = v7 + v5 + v3
    end
    end
end
© www.soinside.com 2019 - 2024. All rights reserved.