4 ms·
Much less relevant today with Ruby 1.9.x, but still very interesting.
by swatermasysk 15y ago
Much less relevant today with Ruby 1.9.x, but still very interesting.
- potomak 15y agoYes, you're right but, as you observed, my question is driven by curiosity.
- prodigal_erik 15y agoLess relevant how? nil.object_id is still 4 in MRI 1.9.2. The article noted that all integers have odd ids, but not why—the LSB is a http://c2.com/cgi/wiki?TagBit http://c2.com/cgi/wiki?TagBit in MRI. I would hope other implementations are permitted to choose different schemes; it would suck if user code began assuming nobody found a use for more than one tag bit.
- jarin 15y agoThis situation was most encountered by Rails developers trying to access the ID of an ActiveRecord object. Since they changed the method to object_id in Ruby 1.9, calling id on a nil object should just give a NoMethodError instead of that slightly cryptic warning.
- prodigal_erik 15y agoAh, that was a mistake. ActiveRecord should have avoided :id until it was renamed in core Ruby, or returned some sentinel (other than nil) whose :id method fails. Assuming Ruby didn't critically depend on :id succeeding for every object, that is.