Muestra la impresión predeterminada de los tipos compuestos cuando tiene un "show" personalizado definido

8

Si el autor de un paquete ha definido una función personalizadashow para su tipo compuesto, ¿hay alguna forma de imprimir fácilmente el valor predeterminado show? Es decir, ¿qué habría mostrado Julia para el tipo compuesto antes de la personalización?

Estoy usando Juno para recorrer el código de funciones complejas para probar y quiero ver la representación de los datos, pero la estructura completa structno se muestra debido a la impresión personalizada.

Alec
fuente

Respuestas:

8

Puedes usar Base.show_default.

Por ejemplo, Measurements.jldefine la impresión personalizada del 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
fuente
6

Puede usar invokepara asegurarse de que showse llame al método predeterminado :

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)

También tenga en cuenta que dumppuede ser muy útil en ese escenario exacto:

julia> dump(Bar(1,2,3))
Bar
  a: Int64 1
  b: Int64 2
  c: Int64 3
pfitzseb
fuente
44
Sí, para el caso de uso específico dumpes el camino a seguir.
giordano