ruby / ruby/pp

Pretty Prettying a SimpleDelegator object which implements `#inspect` doesn't work

Offen
#39 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Ruby
Sterne
36
Forks
21
Ø Merge
8 Std. 22 Min.
Gemergte PRs (30 T.)
1

Beschreibung

Hey there!

I come across this weird bug(?) when I was trying to inspect an object in irb. Since irb uses pp to print the objects I'm opening this issue here.

In my case I have a class that inherits from SimpleDelegator:

require "delegate"

class Parent
  def inspect
    "<parent>"
  end
end

class Child < SimpleDelegator
  def inspect
    "<child>"
  end
end

In irb I noticed it because the objects are being shown using inspect:

irb(main):001> Parent.new.inspect
# => "<parent>"

irb(main):002> Parent.new
# => <parent>

irb(main):003> Child.new(Parent.new).inspect
# => "<child>"

irb(main):004> Child.new(Parent.new)
# => <parent>

Personally, I would have expected the last one to also show <child>. Now after digging into this a bit more (thanks @st0012), it seems like you can also reproduce this in pp directly using:

require "delegate"
require "pp"

class Parent
  def inspect
    "<parent>"
  end
end

class Child < SimpleDelegator
  def inspect
    "<child>"
  end
end

parent = Parent.new
child = Child.new(parent)

pp child 
#=> "<parent>"

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Führe zunächst die bereitgestellte Ruby-Reproduktion mit delegate und pp aus und vergleiche dann das Verhalten von Parent und Child bei der Ausgabe. Lies das Verhalten von PrettyPrinter im Zusammenhang mit SimpleDelegator und benutzerdefiniertem inspect; abgeschlossen ist die Aufgabe, wenn die beabsichtigte Darstellung von Child konsistent ausgegeben wird, ohne die gewöhnliche Delegation zu beeinträchtigen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
ruby
Bereich
tooling
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.