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.

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))

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

44
Sí, para el caso de uso específico dumpes el camino a seguir.
giordano
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.