Class variables and class instance variables in Pickaxe 2nd


#1

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


#2

On May 20, 2006, at 11:52 PM, uncutstone wu wrote:

begins

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.


#3

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 B.

http://www.ruby-doc.org - Ruby Help & Documentation
http://www.artima.com/rubycs/ - 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


#4

Logan C. wrote:

On May 20, 2006, at 11:52 PM, uncutstone wu wrote:

begins

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.

Very thanks, you make it clear to me now. Can I say class instance
variables are totally private nobody except the class own it can access
it, and by default, class variables are public to object instances and
subclasses?

uncutstone


#5

James B. 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