# Class variables and class instance variables in Pickaxe 2nd

**URL:** <https://www.ruby-forum.com/t/class-variables-and-class-instance-variables-in-pickaxe-2nd/95067>\
**Category:** Ruby\
**Created:** [May 21, 2006, 5:52am UTC](https://www.ruby-forum.com/t/class-variables-and-class-instance-variables-in-pickaxe-2nd/95067 "2006-05-21T05:52:28Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![uncutstone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/7993a0/32.png) [@uncutstone](https://www.ruby-forum.com/u/uncutstone)\
**Post date:** [May 21, 2006, 5:52am UTC](https://www.ruby-forum.com/t/class-variables-and-class-instance-variables-in-pickaxe-2nd/95067/1 "2006-05-21T05:52:28Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![uncutstone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/7993a0/32.png) [@uncutstone](https://www.ruby-forum.com/u/uncutstone)\
**Post date:** [May 21, 2006, 6:05am UTC](https://www.ruby-forum.com/t/class-variables-and-class-instance-variables-in-pickaxe-2nd/95067/2 "2006-05-21T06:05:37Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![uncutstone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/7993a0/32.png) [@uncutstone](https://www.ruby-forum.com/u/uncutstone)\
**Post date:** [May 21, 2006, 6:36am UTC](https://www.ruby-forum.com/t/class-variables-and-class-instance-variables-in-pickaxe-2nd/95067/3 "2006-05-21T06:36:42Z")

</div>

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](http://www.ruby-doc.org) - Ruby Help & Documentation  
[Ruby Code & Style](http://www.artima.com/rubycs/) - The Journal By & For Rubyists  
[http://www.rubystuff.com](http://www.rubystuff.com) - The Ruby Store for Ruby Stuff  
[http://www.jamesbritt.com](http://www.jamesbritt.com) - Playing with Better Toys  
[http://www.30secondrule.com](http://www.30secondrule.com) - Building Better Tools

---

<div class="post-metadata">

**Author:** ![uncutstone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/7993a0/32.png) [@uncutstone](https://www.ruby-forum.com/u/uncutstone)\
**Post date:** [May 21, 2006, 6:40am UTC](https://www.ruby-forum.com/t/class-variables-and-class-instance-variables-in-pickaxe-2nd/95067/4 "2006-05-21T06:40:16Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![uncutstone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/7993a0/32.png) [@uncutstone](https://www.ruby-forum.com/u/uncutstone)\
**Post date:** [May 21, 2006, 6:47am UTC](https://www.ruby-forum.com/t/class-variables-and-class-instance-variables-in-pickaxe-2nd/95067/5 "2006-05-21T06:47:15Z")

</div>

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
