A
Ara.T.Howard
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
===============================================================================
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
===============================================================================