advice requested / attributes.rb

A

Ara.T.Howard

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
1
4
2
1
4
2
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 ;-)

- 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
===============================================================================
 
D

Dave Burt

Ara.T.Howard said:
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 ;-)

POLS belongs to Matz, doesn't it? :)
- 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
 
A

Ara.T.Howard

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"?

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
--
===============================================================================
| 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
===============================================================================
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,011
Latest member
AjaUqq1950

Latest Threads

Top