Newbie Class variable question

  • Thread starter Elias Athanasopoulos
  • Start date
E

Elias Athanasopoulos

Hello!

Forgive my newbie-ness.

Using ruby 1.8, while trying to create a similar example of
one I found to the book called "The Ruby Way":

class Foo

@@bar = 10

end

Foo.bar = 4

I get:

elathan@velka:~/src/ruby> ruby test.rb
test.rb:7: undefined method `bar=' for Foo:Class (NoMethodError)

Is this behaviour normal?

Enjoy,
 
T

ts

E> elathan@velka:~/src/ruby> ruby test.rb
E> test.rb:7: undefined method `bar=' for Foo:Class (NoMethodError)

E> Is this behaviour normal?

Yes, what you want is a class *instance* variable

svg% cat b.rb
#!/usr/bin/ruby
class A
class << self
attr_accessor :a
end
end

A.a = 12
p A.a
svg%

svg% b.rb
12
svg%

a class variable can be seen as a shared variable

svg% cat b.rb
#!/usr/bin/ruby
class A
@@a = 12

def self.a
p @@a
end

def a
p @@a
end
end

class B < A
def self.b
p @@a
end

def b
p @@a
end
end

A.a
A.new.a

B.b
B.new.b
svg%

svg% b.rb
12
12
12
12
svg%





Guy Decoux
 
E

Elias Athanasopoulos

E> elathan@velka:~/src/ruby> ruby test.rb
E> test.rb:7: undefined method `bar=' for Foo:Class (NoMethodError)

E> Is this behaviour normal?

Yes, what you want is a class *instance* variable

Actually, I want an easy way to access a class variable from
another class. I construct objects, which I want them to
carry an array specific to their class:

class Foo
@@info = ...
...
end

class Bar
@@info = ...
...
end

As I see from your reply, the only way to access a class
variable from another class (or outside the class in general)
is to define self.foo and foo methods; foo stands for the class
var.

This sounds a little bit wierd to me, since, in the book[*] I have,
the author accesses a class variable implicitly, without having
define self.foo and foo inside the class.

Thanks for your reply!

[*] The Ruby Way - Hal Fulton

Enjoy,
 
E

Elias Athanasopoulos

Just to try to get it all clear: do you have a page number in The Ruby
Way for the example you mentioned?

Yes. It's on page 250.

As I see it now, the author has defined Metal.current_temp=(x).

I apologize for the confusion and I'm thankfull for your
detailed replies. :)

Now it's all clear to me.

Enjoy,
 

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

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,046
Latest member
Gavizuho

Latest Threads

Top