Setting class variable from parent class?

Hi All!

I’m trying to teach my Parent class how to set variables into its Child
class; ie

class Parent
def self.set_my_class_variable(value)
reference_to_my_class.my_variable = value
end
end

class Child
set_my_class_variable “hello world”
end

I think what I’m missing is the way to reference the Child class. I’ve
been wrongly supposing that

Parent.set_my_class_variable(value)
@@my_variable = value
end

would be doing the work. But the ‘@@’ syntax sets the class variable to
Parent.

Thank you,
Marco

On Tue, 4 Apr 2006, Marco wrote:

would be doing the work. But the ‘@@’ syntax sets the class variable to
Parent.

Thank you,
Marco

 harp:~ > cat a.rb
 class Parent
   class << self
     attr_accessor 'a'
     def inherited child
       child.a = 42
     end
   end
 end

 class Child < Parent
 end

 p Child.a


 harp:~ > ruby a.rb
 42

hth.

-a

Hi –

On Tue, 4 Apr 2006, Marco wrote:

Hi All!

I’m trying to teach my Parent class how to set variables into its Child
class; ie

The parent and its children share class variables:

irb(main):001:0> class A; @@var = 2; end
=> 2
irb(main):002:0> class B < A; @@var; end
=> 2

However, that’s supposed to change in Ruby 2.0, so that class
variables will more strictly class-scoped (and not hierarchy-scoped).

David


David A. Black ([email protected])
Ruby Power and Light, LLC (http://www.rubypowerandlight.com)

“Ruby for Rails” chapters now available
from Manning Early Access Program! Ruby for Rails

On Tue, Apr 04, 2006 at 01:08:24AM +0900, [email protected] wrote:

On Tue, 4 Apr 2006, Marco wrote:

I’m trying to teach my Parent class how to set variables into its Child
class; ie

The parent and its children share class variables:

irb(main):001:0> class A; @@var = 2; end
=> 2
irb(main):002:0> class B < A; @@var; end
=> 2

… depending on the assignment order

class A; end
class B < A; @@cv = 1 end
class A; @@cv = 2 end
class A; @@cv end # => 2
class B; @@cv end # => 1 # !> class variable @@cv of A is overridden
by B

On Tue, Apr 04, 2006 at 08:44:29AM +0900, [email protected] wrote:

irb(main):002:0> class B < A; @@var; end
=> 2

… depending on the assignment order
[…]
http://www.ruby-talk.org/cgi-bin/scat.rb/ruby/ruby-talk/19972, and
Matz’s response.

matz> I know this happens. I consider this as an error that Ruby does
not
matz> detect yet.

Fortunately some things have changed for the better since then:

class A; end
class B < A; @@cv = 1 end
class A; @@cv = 2 end
class A; @@cv end # => 2
class B; @@cv end # => 1 # !> class variable @@cv of A is overridden by B
================================================

Hi –

On Tue, 4 Apr 2006, Mauricio F. wrote:

=> 2

… depending on the assignment order

class A; end
class B < A; @@cv = 1 end
class A; @@cv = 2 end
class A; @@cv end # => 2
class B; @@cv end # => 1 # !> class variable @@cv of A is overridden by B

I know – see
http://www.ruby-talk.org/cgi-bin/scat.rb/ruby/ruby-talk/19972, and
Matz’s response.

David


David A. Black ([email protected])
Ruby Power and Light, LLC (http://www.rubypowerandlight.com)

“Ruby for Rails” chapters now available
from Manning Early Access Program! Ruby for Rails