Feature #1786

unexpected #inspect behaviour

Added by Andy Bogdanov over 2 years ago. Updated 10 months ago.

[ruby-core:24425]
Status:Closed Start date:07/18/2009
Priority:Normal Due date:
Assignee:- % Done:

100%

Category:DOC
Target version:1.9.2

Description

It's said in the documentation that #inspect, if not overridden should use #to_s. Instead of that, when not overridden, #inspect uses #to_s only until the first instance variable assignment, after that it is overridden by interpreter.

~$ cat > test.rb
class MyClass
  def to_s() "instance of MyClass" end
  def assign
    @var = var
    self
  end
end

~$ irb
irb(main):001:0> load 'test.rb'
=> true
irb(main):002:0> MyClass.new
=> Instance of MyClass
irb(main):003:0> MyClass.new.assign
=> #<MyClass:0x9071620 @val=nil>

Besides that #to_s stays unchanged when it's not overridden and because usually the first instance variable assignment happens in #initialize in most cases #inspect returns something like #<MyClass:0x9071620 @val=nil> and #to_s returns #<MyClass:0x9071620>

Associated revisions

Revision 25427
Added by Nobuyoshi Nakada over 2 years ago

* object.c (rb_obj_inspect): fixed rdoc about the case that to_s is called. [ruby-core:24425]

Revision 25428
Added by Yukihiro Matsumoto over 2 years ago

* object.c (rb_obj_inspect): print instance variables only when Object#to_s is not overridden. [ruby-core:24425] * class.c (rb_obj_basic_to_s_p): new function.

History

Updated by Roger Pack over 2 years ago

Which versions show this?
-r

Updated by Nobuyoshi Nakada over 2 years ago

  • Status changed from Open to Rejected
to_s isn't inspect.
orverride inspect if you want to change it.

Updated by Yuki Sonoda over 2 years ago

  • Category set to DOC
  • Status changed from Rejected to Open
  • Target version set to 1.9.2
I think it is a bug of rdoc documentation.

Updated by Nobuyoshi Nakada over 2 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100
This issue was solved with changeset r25427.
Andy, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

Updated by Yukihiro Matsumoto over 2 years ago

Hi,

In message "Re: [ruby-core:26193] [Feature #1786](Rejected) unexpected #inspect behaviour"
    on Wed, 21 Oct 2009 09:29:53 +0900, Nobuyoshi Nakada <redmine@ruby-lang.org> writes:

|to_s isn't inspect.
|orverride inspect if you want to change it.

But still, the behavior OP reported is weird.  Redefining #to_s should
not affect inspect, if they are totally different.

I will work on.

							matz.

Also available in: Atom PDF