我正在与 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 表达式的打印来实现这一点?我希望输出的格式更易于阅读和理解。任何有关如何实现这一目标的指导或示例将不胜感激。
您可以通过将
: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