【发布时间】:2018-08-17 14:41:42
【问题描述】:
在 Ruby 中,对象上的 to_s 包含对象 id 的编码。
[2] pry(main)> shape = Shape.new(4,4)
=> #<Shape:0x00007fac5eb6afc8 @num_sides=4, @side_length=4>
在文档中说
返回一个表示 obj 的字符串。默认 to_s 打印对象的类和对象id 的编码。 https://apidock.com/ruby/Object/to_s
在上面的例子中,对象id的编码是0x00007fac5eb6afc8。
在How does object_id assignment work? 他们解释了
在 MRI 中,对象的 object_id 与在 C 级别上表示对象的 VALUE 相同。
所以我对比了object_id,和对象id的编码不一样。
[2] pry(main)> shape = Shape.new(4,4)
=> #<Shape:0x00007fac5eb6afc8 @num_sides=4, @side_length=4>
[3] pry(main)> shape.object_id
=> 70189150066660
对象 id 的编码到底是什么?它似乎不是object_id。
【问题讨论】:
-
对于非整数,打印值是
object_id的两倍,见stackoverflow.com/q/3430280/477037
标签: ruby object document tostring