Advice requested / attributes.rb

i just made a mod to my attributes module which allows this

   jib:~/eg/ruby/attributes/attributes-1.1.1 > cat a.rb
   require './lib/attributes-1.1.1'

   class A
     class_attributes %w( x y z )
     x 4
     y 1
     z 1
   end

   class B < A
     y 2
   end

   class C < B
     z 2
   end

   p A::x
   p A::y
   p A::z

   p B::x
   p B::y
   p B::z

   p C::x
   p C::y
   p C::z

   jib:~/eg/ruby/attributes/attributes-1.1.1 > ruby a.rb
   4
   1
   4
   2
   1
   4
   2

so, as you can see these class attributes are 'inherited' instance values.
this is done using class instance vars and a search up the ancestors list if an
attribute has not been set (defined?) in a class.

questions :

   - does this sit o.k. with people : does it violate pols? i think it's quite
     natural but that's me :wink:

   - what do i call it? for now i'm calling it an class 'inherited' variable
     since it's not really a class instance (@) var nor a hierarchy (@@) var.

comments?

-a

···

--

email :: ara [dot] t [dot] howard [at] noaa [dot] gov
phone :: 303.497.6469
renunciation is not getting rid of the things of this world, but accepting
that they pass away. --aitken roshi

===============================================================================

"Ara.T.Howard" <Ara.T.Howard@noaa.gov> asked:

  class A
    class_attributes %w( x y z )
    x 4
    y 1
    z 1
  end

  class B < A
    y 2
  end
<snip>
so, as you can see these class attributes are 'inherited' instance values.
this is done using class instance vars and a search up the ancestors list
if an
attribute has not been set (defined?) in a class.

questions :

  - does this sit o.k. with people : does it violate pols? i think it's
quite
    natural but that's me :wink:

POLS belongs to Matz, doesn't it? :slight_smile:

  - what do i call it? for now i'm calling it an class 'inherited'
variable
    since it's not really a class instance (@) var nor a hierarchy (@@)
var.

I don't see that it's clear that these are not @@ variables - wouldn't that
be the obvious implementation for that behaviour, and for something called
"class attributes"?

Cheers,
Dave

if it WERE simply an @@var you'd have

   class A
     class_attribute 'x'
     x 42
   end

   class B < A
     x 42.0
   end

   p A::x #=> 42.0

but instead you get

   p A::x #=> 42
   p B::x #=> 42.0

if it were simply a class @var you'd have

   class A
     class_attribute 'x'
     x 42
   end

   class B < A
   end

   p B::x #=> nil

but instead you get

   p B::x #=> 42

and then if you

   class C < B; end

   B::x = 42.0

you'll have

   p A::x #=> 42
   p B::x #=> 42.0
   p C::x #=> 42.0

make sense? you __inherit__ the 'x'. with @vars every class has one and
there is no sharing. with @@vars there is ONE and ONLY ONE - all classes in a
hierarchy share it. this works using follow logic:

   - if you set the var you have it
   - else look up ancestry chain for it

cheers.

-a

···

On Sat, 30 Apr 2005, Dave Burt wrote:

I don't see that it's clear that these are not @@ variables - wouldn't that
be the obvious implementation for that behaviour, and for something called
"class attributes"?

--

email :: ara [dot] t [dot] howard [at] noaa [dot] gov
phone :: 303.497.6469
renunciation is not getting rid of the things of this world, but accepting
that they pass away. --aitken roshi

===============================================================================