2011-11-25 12 views
22

Ben yeni bir nesne yapmak, ı da nesne sınıfını kullanarak, diğer bazı nesneleri yapmakRuby'de object_id özniteliği tarafından bir nesne bulabilir miyim?

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

Bu nesne kimliğine sahipse

o = Object.new 

, diyelim. Ruby'nin object_id özniteliğini kullanarak 'o' nesnesini bulmasının en iyi yolu ne olurdu? 'Search_results' 'search_id' karşılık gelen nesne olacağını nereden

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

gibi bir şey açısından düşünüyorum. Ayrıca, nesneleri indeksleme ve onları bir kılavuz ya da başka bir şeyle almanın tamamen farklı bir yaklaşımını kesinlikle takdir ediyorum. Çok teşekkürler!

Hah, sanırım gerçekten bir veritabanı bağlamında bunu düşünmem gerekiyor ve sadece MySQL sorgularını veya nesneyi bulmayı seçtiğim DB'ninkileri kullanıyorum. Bunu düşündüğümde, bu hayali 'bul()' yöntemiyle erişilebilecek tek olası şeyler, yeni yaratılan veya 'aktif' olan şeyler olurdu? Bu berbat bir soru için üzgünüm.

cevap

53

Evet, olabilir sen:

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" 

Bunu mıdır? Bunu sana bırakacağım. Bir nesneyi seri hale getirilebilir bir id (ör. Bir Dizide ve dizini döndürerek) saklamak için daha az meraklı yol vardır. Karşılaşabileceğiniz bir sorun, bir nesneye tuttuğunuz tek 'referans', object_id ise, nesnenin aradığınız zaman GC tarafından toplanabilmesidir.

+0

Üzgünüm, buraya geri dönmem çok uzun sürdü. Bu kesinlikle temel sorumu yanıtladı. Orada kafa karıştırıcı ikincil şeyler sardım ama bunu kendi başıma ya da başka bir noktada bir noktada ele alacağım. Çok teşekkürler! – wuliwong

+1

, Sınıfı tarafından yaratılan tüm örnekleri bir sınıf değişkeninde tutabilseydi, topladıkları çöpün toplanmasını engelleyebilirdi ve bunlara başvurmak için object_id'i kullanabilirler – Tilo

+0

'gerektiren' objspace'' gerektirir - önemsiz değil .... – ribamar

İlgili konular