当我创建一个新对象时,假设
o = Object.new
这个对象有一个id,
o.object_id
#=> ########
我还使用 Object 类制作了其他几个对象。使用 object_id 属性让 ruby 找到对象“o”的最佳方法是什么?我在想类似的事情
search_id = o.object_id
search_result = Object.find(search_id)
其中“search_results”是对应于“search_id”的对象。此外,我肯定会欣赏一种完全不同的方法来索引对象并通过 guid 或其他方式检索它们。非常感谢!
哈,好吧,我想我真的只需要在数据库的上下文中考虑这个问题,只需使用 MySQL 查询或我选择的任何数据库的查询来查找对象。我想得越多,唯一可能通过这个想象中的“find()”方法访问的东西就是新创建的或“事件的”东西?很抱歉提出这个糟糕的问题。
最佳答案
是的,你可以:
irb(main):002:0> s1 = "foo"
#=> "foo"
irb(main):003:0> s2 = ObjectSpace._id2ref(s1.object_id)
#=> "foo"
irb(main):004:0> s2.object_id == s1.object_id
#=> true
irb(main):005:0> s2[0] = "z"
#=> "z"
irb(main):006:0> s1
#=> "zoo"
你应该这样做吗?我会把它留给你。存储具有可序列化 id
的对象的方法比较少(例如,在数组中并返回索引)。您可能会遇到的一个问题是,如果您保留对对象的唯一“引用”是 object_id
,那么当您不查看时,GC 可能会收集该对象。
关于ruby - 我可以或应该通过 ruby 中的 object_id 属性找到一个对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8264732/