Подтвердить что ты не робот

Могу ли я или СЛЕДУЕТ найти объект по атрибуту object_id в ruby?

Когда я создаю новый объект, скажем

o = Object.new

Этот объект имеет id,

o.object_id 
#=> ########

Я также создаю несколько других объектов, используя класс Object. Что было бы лучшим способом заставить ruby ​​найти объект "o", используя атрибут object_id? Я думаю с точки зрения чего-то вроде

search_id = o.object_id
search_result = Object.find(search_id)

Где "search_results" будет объектом, соответствующим "search_id". Кроме того, я определенно оценил бы совершенно иной подход к индексированию объектов и извлечению их направляющим или что-то в этом роде. Большое спасибо!

Ха, ну, я думаю, мне просто нужно подумать об этом в контексте базы данных и просто использовать MySQL-запросы или те, которые DB я выбираю для поиска объекта. Чем больше я думаю об этом, единственными возможными вещами, которые были бы доступны через этот воображаемый метод "find()", были бы вещи, которые были вновь созданы или "активны"? Извините за то, что вы задали этот вопрос.

4b9b3361

Ответ 1

Да, вы можете:

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"

Должны ли вы это сделать? Я оставлю это до вас. Есть менее geeky способы хранения объекта с сериализуемым id (например, в массиве и возвратом индекса). Одна из проблем, с которыми вы можете столкнуться, заключается в том, что если единственная "ссылка", которую вы держите в объекте, это object_id, объект может быть собран GC, когда вы не смотрите.