Exibir impressão padrão de tipos compostos quando houver um `show` personalizado definido

8

Se o autor do pacote definiu uma função personalizadashow para o tipo de composição, existe uma maneira de imprimir facilmente o padrão show? Ou seja, o que Julia teria mostrado para o tipo composto antes da personalização?

Estou usando o Juno para percorrer o código de funções complexas para tentar e quero ver a representação dos dados, mas a estrutura completa do structnão é mostrada devido à impressão personalizada.

Alec
fonte

Respostas:

8

Você pode usar Base.show_default.

Por exemplo, Measurements.jldefine impressão personalizada do Measurementtipo:

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))
Giordano
fonte
6

Você pode usar invokepara garantir que o showmétodo padrão seja chamado:

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)

Observe também que dumppode ser muito útil nesse cenário exato:

julia> dump(Bar(1,2,3))
Bar
  a: Int64 1
  b: Int64 2
  c: Int64 3
pfitzseb
fonte
4
Sim, para o caso de uso específico dumpé o caminho a percorrer.
giordano 12/01