Feature #1786
unexpected #inspect behaviour
| 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
* object.c (rb_obj_inspect): fixed rdoc about the case that to_s
is called. [ruby-core:24425]
* 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.