From: "Ara.T.Howard" Date: 2005-06-07T03:04:24+09:00 Subject: ObjectSpace::_id2ref and GC say i'm doing something like this class << self def attribute(*list) list.flatten! list.each do |arg| @attrbiutes ||= [] @do_not_gc ||= [] list.flatten.each do |arg| arg, default = case arg when Hash arg.to_a.first else [arg, nil] end @do_not_gc << default unless @do_not_gc.include? default unless instance_methods.include? "#{ arg }" module_eval <<-code def #{ arg }(*a) unless defined? @#{ arg } @#{ arg } = ObjectSpace::_id2ref #{ default.object_id } end if a.empty? @#{ arg } else send('#{ arg }=', *a) end end def #{ arg }=(val, *a) if a.empty? @#{ arg } = val else @#{ arg } = ([val] + a) end end def #{ arg }? defined? @#{ arg } and @#{ arg } end code end @attributes << "#{ arg }" end @attributes end end which allows niceness such as class C attribute 'foo' => 42 end is the @do_not_gc required? it seems like doing something like id = object.object_id and then later value = ObjectSpace::_id2ref id one is gambling that the original object has not been gc'd and that the id still points to the same object. is this accurate? cheers. -a -- =============================================================================== | email :: ara [dot] t [dot] howard [at] noaa [dot] gov | phone :: 303.497.6469 | My religion is very simple. My religion is kindness. | --Tenzin Gyatso ===============================================================================