定义了自定义“show”时显示复合类型的默认打印

Ale*_*lec 8 julia

如果包作者为他们的复合类型定义了一个自定义show函数,有没有办法轻松打印默认值show?也就是说,在定制之前 Julia 会为复合类型显示什么?

我正在使用 Juno 单步调试复杂函数的代码,我想查看数据表示,但struct由于自定义打印,未显示完整的结构。

gio*_*ano 8

您可以使用Base.show_default.

例如,Measurements.jl定义Measurement类型的自定义打印:

julia> using Measurements

julia> x = 3 ± 0.1
3.0 ± 0.1

julia> Base.show_default(stdout, x)
Measurement{Float64}(3.0, 0.1, 0x0000000000000003, Measurements.Derivatives((3.0, 0.1, 0x0000000000000003) => 1.0))
Run Code Online (Sandbox Code Playgroud)


pfi*_*seb 6

您可以使用invoke来确保show调用默认方法:

julia> struct Bar
       a
       b
       c
       end

julia> Base.show(io::IO, b::Bar) = print(io, "Bar")

julia> Bar(1,2,3)
Bar

julia> invoke(show, Tuple{IO, Any}, stdout, Bar(1,2,3))
Bar(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

另请注意,dump在这种情况下可能非常有用:

julia> dump(Bar(1,2,3))
Bar
  a: Int64 1
  b: Int64 2
  c: Int64 3
Run Code Online (Sandbox Code Playgroud)

  • 是的,对于特定的用例,“dump”是正确的选择。 (4认同)