Issue #6130 has been updated by Eregon (Benoit Daloze).


mame (Yusuke Endoh) wrote:
> I'm not sure if it is trivial to fix this issue.
> Could anyone please create a patch and study the behavior?

I've been working on this and wondered what to do if there is no instance variable. Should it call (dynamically) #to_s? or always use Kernel#to_s which gives the class name and pointer (which would be called anyway if #to_s was not overridden) ?

That's the first solution, use the nice #inspect output whenever there are instance variables.
Another, lighter way would be to use #to_s for internal structures (and T_DATA, so classes defined in C extensions), but never for other types (all classes defined in Ruby).

What do you think?
----------------------------------------
Feature #6130: inspect using to_s is pain
https://bugs.ruby-lang.org/issues/6130#change-25807

Author: trans (Thomas Sawyer)
Status: Assigned
Priority: Normal
Assignee: mame (Yusuke Endoh)
Category: core
Target version: 2.0.0


Every time I define #to_s on a class I have to remember to also redefine #inspect. It's annoying and has led me to waste hours debugging b/c the errors that can occur from it often seem strange and unrelated.

I think #inspect should have an independent definition that outputs the class name, object_id and when possible instance variable settings, and should have nothing to do with #to_s by default. We developers can always alias it as such if it is appropriate.

The only exception should be for classes that have literal representation in Ruby, such as Array, String, Hash, etc. In those cases the #inspect should give the literal representation.




-- 
http://bugs.ruby-lang.org/