当我创建一个新对象时,让我们说
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()'方法可以访问的唯一可能的东西是新创建或“活跃”的东西?很抱歉这个问题很糟糕。
答案 0 :(得分:58)
是的,你可以:
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可以收集该对象。