These are two concepts in Pickaxe 2nd edtion.
Class Variables example is in chapter 3:
class Song
@@plays = 0
def play
@@plays += 1
end
end
Class instance variables example is in chapter 24:
class Test
@cls_var = 123
def Test.inc
@cls_var += 1
end
end
The only difference I can see is the names of the variables, one begins
with @, and the other begins with @@.
Are they same? I feel confused if they are same , why give two names?
Thanks in advance.
uncutstone
···
--
Posted via http://www.ruby-forum.com/.
Class variables are accessible to instances of the class directly. Class variables also propagate thru the inheritance hierarchy. Class instance variables are just like any other instance variables, they just happen to be associated with an object of class Class.
···
On May 20, 2006, at 11:52 PM, uncutstone wu wrote:
These are two concepts in Pickaxe 2nd edtion.
Class Variables example is in chapter 3:
class Song
@@plays = 0
def play
@@plays += 1
end
end
Class instance variables example is in chapter 24:
class Test
@cls_var = 123
def Test.inc
@cls_var += 1
end
end
The only difference I can see is the names of the variables, one begins
with @, and the other begins with @@.
Are they same? I feel confused if they are same , why give two names?
Thanks in advance.
uncutstone
--
Posted via http://www.ruby-forum.com/\.
uncutstone wu wrote:
These are two concepts in Pickaxe 2nd edtion.
Class Variables example is in chapter 3:
class Song
@@plays = 0
def play
@@plays += 1
end
end
Note that the class variable is being used here by an instance method.
Class instance variables example is in chapter 24:
class Test
@cls_var = 123
def Test.inc
@cls_var += 1
end
end
And note that the class instance variable is being used here by a class method.
A class is also an object; it's an instance of Class. Since it is an object it may have its own instance variables. Class variables are available to the class and to instances of that class; class instance variables are only visible to the class itself (not to instances of that class). (Yeah, it can be confusing at first.)
class Foo
@@cls_var = 123
@cls_instvar = 'abc'
def test
p @@cls_var
p @cls_instvar
end
def self.test
p @@cls_var
p @cls_instvar
end
end
puts( "Foo is a #{Foo.class}")
f = Foo.new
f.test
Foo.test
···
--
James Britt
http://www.ruby-doc.org - Ruby Help & Documentation
Ruby Code & Style - The Journal By & For Rubyists
http://www.rubystuff.com - The Ruby Store for Ruby Stuff
http://www.jamesbritt.com - Playing with Better Toys
http://www.30secondrule.com - Building Better Tools
James Britt wrote:
A class is also an object; it's an instance of Class. Since it is an
object it may have its own instance variables. Class variables are
available to the class and to instances of that class; class instance
variables are only visible to the class itself (not to instances of that
class). (Yeah, it can be confusing at first.)
class Foo
@@cls_var = 123
@cls_instvar = 'abc'
def test
p @@cls_var
p @cls_instvar
end
def self.test
p @@cls_var
p @cls_instvar
end
end
puts( "Foo is a #{Foo.class}")
f = Foo.new
f.test
Foo.test
Very thanks, it's quite clear now.
uncutstone
···
--
Posted via http://www.ruby-forum.com/\.