Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Ruby (http://www.velocityreviews.com/forums/f66-ruby.html)
-   -   Class Variables for subclases... (http://www.velocityreviews.com/forums/t839379-class-variables-for-subclases.html)

Sonny Chee 03-27-2007 02:37 AM

Class Variables for subclases...
 
Hey Guys,

Check out the following:

class A
@@anobject = 'green'
def fun2
@@anobject
end
end

class B < A
@@anobject = 'blue'
def fun2
@@anobject
end
end

puts B.new.fun2 # blue
puts A.new.fun2 # blue

So it looks like the subclass B is not defining its own class variable
but reusing A's class variable @@anobject. Is there a different way to
specify class variables to overcome this issue?

Sonny.

--
Posted via http://www.ruby-forum.com/.


Sonny Chee 03-27-2007 03:25 AM

Re: Class Variables for subclases...
 
Yukihiro Matsumoto wrote:

> You can use constants-as-class-shared technique.


Thanks, Matz. For my edification, is there a reason why class variables
behave in this way when subclassed? Is this a feature of the language
or the Ruby Interpretter?

Sonny.

--
Posted via http://www.ruby-forum.com/.


Joel VanderWerf 03-27-2007 03:34 AM

Re: Class Variables for subclases...
 
Sonny Chee wrote:
> Hey Guys,
>
> Check out the following:
>
> class A
> @@anobject = 'green'
> def fun2
> @@anobject
> end
> end
>
> class B < A
> @@anobject = 'blue'
> def fun2
> @@anobject
> end
> end
>
> puts B.new.fun2 # blue
> puts A.new.fun2 # blue
>
> So it looks like the subclass B is not defining its own class variable
> but reusing A's class variable @@anobject. Is there a different way to
> specify class variables to overcome this issue?
>
> Sonny.
>


You may find it more suitable to use instance variables in your class
objects, and write accessors so you can get at them from instances of
your classes.

For example:

class A
@anobject = 'green'
def self.anobject
@anobject
end
def fun2
self.class.anobject
end
end

class B < A
@anobject = 'blue'
end

puts B.new.fun2 # blue
puts A.new.fun2 # green


Google (or search the list) for 'ruby class instance variable'.

I think the 'traits' gem does this in a systematic way, though of course
it's worth playing around to understand the concept first.

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407


Sonny Chee 03-27-2007 03:38 AM

Re: Class Variables for subclases...
 
Thanks for the pointers Joel.

Sonny.

--
Posted via http://www.ruby-forum.com/.



All times are GMT. The time now is 05:52 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.