Forum: Ruby #<Object:0x2c1c8f0> <--- why is the displayed number == obje

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
48d1aca7191f2d16e184971054c7c143?d=identicon&s=25 Meinrad Recheis (Guest)
on 2007-06-06 17:11
(Received via mailing list)
irb(main):001:0> VERSION
=> "1.8.5"
irb(main):002:0> o=Object.new
=> #<Object:0x2c1c8f0>
irb(main):003:0> ObjectSpace._id2ref 0x2c1c8f0
RangeError: 0x2c1c8f0 is not id value
        from (irb):3:in `_id2ref'
        from (irb):3
irb(main):004:0> ObjectSpace._id2ref 0x2c1c8f0/2
=> #<Object:0x2c1c8f0>
irb(main):005:0>

I think that is pretty confusing. I am sure there is a good reason for
this. But, don't you think it'd be better to display the real
object_id instead of the doubled value?

-- henon
75992e20dc6244f55cdd571c27c9d176?d=identicon&s=25 Taras Koval' (Guest)
on 2007-06-06 17:20
(Received via mailing list)
I agree

2007/6/6, Meinrad Recheis <meinrad.recheis@gmail.com>:
B8cfd5ec0f88bf5b5f2eedda7d1a0746?d=identicon&s=25 unknown (Guest)
on 2007-06-06 17:21
(Received via mailing list)
In message
<43d756720706060810s53f67ec8yc9c0f3734d1f233f@mail.gmail.com>, "Meinrad
Recheis" wri
tes:
>irb(main):005:0>
>I think that is pretty confusing. I am sure there is a good reason for
>this. But, don't you think it'd be better to display the real
>object_id instead of the doubled value?

Maybe it would.  That said, Object.object_id works as expected, so this
only affects irb's display.

(The reason, presumably, is that the ID is left-shifted by one, because
objects with a 1 in the low-order bit are fixnums.)

-s
E0d864d9677f3c1482a20152b7cac0e2?d=identicon&s=25 Robert Klemme (Guest)
on 2007-06-06 17:35
(Received via mailing list)
On 06.06.2007 17:10, Meinrad Recheis wrote:
> irb(main):005:0>
>
> I think that is pretty confusing. I am sure there is a good reason for
> this. But, don't you think it'd be better to display the real
> object_id instead of the doubled value?

The output of #inspect is not meant to give you any means to get at the
original object although it may seem so at times.  Having said that,
#object_id and #inspect are completely unrelated and it's just an
implementation artifact that some classes actually return something that
resembles the object id.

As far as I remember this list you are the first one that mentions this.
  So it's probably not that big an issue (at least not as confusing as
"singleton class" :-))

Kind regards

  robert
48d1aca7191f2d16e184971054c7c143?d=identicon&s=25 Meinrad Recheis (Guest)
on 2007-06-07 17:39
(Received via mailing list)
On 6/6/07, Robert Klemme <shortcutter@googlemail.com> wrote:
> > => #<Object:0x2c1c8f0>
> resembles the object id.
>
> As far as I remember this list you are the first one that mentions this.
>   So it's probably not that big an issue (at least not as confusing as
> "singleton class" :-))
>
> Kind regards
>
>         robert
>
>

Robert,
Thanks for your answer. I came across it while debugging a running
application via an eval console. It's not really a problem because I
know that I need to divide the displayed id by 2 to get the object. I
posted it just because ruby didn't work as I expected it to ... which
is completely against the principles of the language.

cheers,
-- henon
E0d864d9677f3c1482a20152b7cac0e2?d=identicon&s=25 Robert Klemme (Guest)
on 2007-06-07 18:10
(Received via mailing list)
On 07.06.2007 17:39, Meinrad Recheis wrote:
>> > irb(main):004:0> ObjectSpace._id2ref 0x2c1c8f0/2
>> implementation artifact that some classes actually return something that
>> resembles the object id.
>>
>> As far as I remember this list you are the first one that mentions this.
>>   So it's probably not that big an issue (at least not as confusing as
>> "singleton class" :-))
>>
> Thanks for your answer. I came across it while debugging a running
> application via an eval console. It's not really a problem because I
> know that I need to divide the displayed id by 2 to get the object.

Well, but that won't work for all cases.

> I
> posted it just because ruby didn't work as I expected it to ... which
> is completely against the principles of the language.

That's only one way to look at it.  The other way is of course to assume
that your expectations were "wrong" (whatever that means).  :-)

Kind regards

  robert
8f6f95c4bd64d5f10dfddfdcd03c19d6?d=identicon&s=25 Rick Denatale (rdenatale)
on 2007-06-07 19:05
(Received via mailing list)
On 6/7/07, Robert Klemme <shortcutter@googlemail.com> wrote:
> Well, but that won't work for all cases.
Nor for all versions of ruby.  The relationship between object_id and
the VALUE representation for various classes has been changing even
within the 1.8.x stream.   $Diety only knows what implementations like
JRuby, rubinius, IronRuby etc would use for inspect which is the
method which produces what you see after the ==> in irb, or call
Kernel#p

Inspect is intended to be used for the 'programmer' representation of
an object, to help activities like debugging. So in the case of
classes like Object that representation will likely have some info
useful to the current internal implementation, and unless it's
documented somewhare, there's no guarantee that it won't change.

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/
E92d09efe27bf50a87967c533fae247a?d=identicon&s=25 unknown (Guest)
on 2007-06-07 19:26
(Received via mailing list)
On Jun 6, 8:21 am, s...@seebs.net (Peter Seebach) wrote:
> (The reason, presumably, is that the ID is left-shifted by one, because
> objects with a 1 in the low-order bit are fixnums.)

When I came across this behavior, this was also my best guess as the
reason.
This topic is locked and can not be replied to.