Zeigt den Standarddruck von zusammengesetzten Typen an, wenn eine benutzerdefinierte "Show" definiert ist

8

Wenn ein Paketautor eine benutzerdefinierte showFunktion für seinen zusammengesetzten Typ definiert hat, gibt es eine Möglichkeit, die Standardeinstellung einfach zu drucken show? Das heißt, was Julia vor der Anpassung für den zusammengesetzten Typ gezeigt hätte?

Ich verwende Juno, um den Code komplexer Funktionen zu durchlaufen und zu versuchen, und ich möchte die Datendarstellung sehen, aber die vollständige Struktur der structwird aufgrund des benutzerdefinierten Drucks nicht angezeigt.

Alec
quelle

Antworten:

8

Sie können verwenden Base.show_default.

Definiert beispielsweise Measurements.jlbenutzerdefiniertes Drucken des MeasurementTyps:

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
quelle
6

Sie können invokedamit sicherstellen, dass die Standardmethode showaufgerufen wird:

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)

Beachten Sie auch, dass dumpdies in genau diesem Szenario sehr nützlich sein kann:

julia> dump(Bar(1,2,3))
Bar
  a: Int64 1
  b: Int64 2
  c: Int64 3
pfitzseb
quelle
4
Ja, für den spezifischen Anwendungsfall dumpist der richtige Weg.
Giordano