# Singleton class - instance or class variables?

**URL:** <https://www.ruby-forum.com/t/singleton-class-instance-or-class-variables/50694>\
**Category:** Ruby\
**Created:** [December 20, 2005, 2:14am UTC](https://www.ruby-forum.com/t/singleton-class-instance-or-class-variables/50694 "2005-12-20T02:14:05Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Caleb\_T](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/977dab/32.png) [@Caleb\_T](https://www.ruby-forum.com/u/Caleb_T)\
**Post date:** [December 20, 2005, 2:14am UTC](https://www.ruby-forum.com/t/singleton-class-instance-or-class-variables/50694/1 "2005-12-20T02:14:05Z")

</div>

When using a singleton class (one that includes Singleton, not an  
eigenclass), can anyone think of any advantage/disadvantage to using  
class variables over instance variables (or visa versa) to access  
data in the class?

Thanks,  
Caleb

---

<div class="post-metadata">

**Author:** ![Caleb\_T](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/977dab/32.png) [@Caleb\_T](https://www.ruby-forum.com/u/Caleb_T)\
**Post date:** [December 20, 2005, 3:03am UTC](https://www.ruby-forum.com/t/singleton-class-instance-or-class-variables/50694/2 "2005-12-20T03:03:37Z")

</div>

Caleb T. wrote:

> When using a singleton class (one that includes Singleton, not an  
> eigenclass), can anyone think of any advantage/disadvantage to using  
> class variables over instance variables (or visa versa) to access  
> data in the class?

I would recommend using class instance variables,  
but the only reason I can think relates to resource  
control and instance instantiation. For the typical  
case one could just as well use classes and class  
instance methods.

> Thanks,  
> Caleb

E

---

<div class="post-metadata">

**Author:** ![Caleb\_T](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/977dab/32.png) [@Caleb\_T](https://www.ruby-forum.com/u/Caleb_T)\
**Post date:** [December 20, 2005, 3:20am UTC](https://www.ruby-forum.com/t/singleton-class-instance-or-class-variables/50694/3 "2005-12-20T03:20:09Z")

</div>

Caleb T. wrote:

> When using a singleton class (one that includes Singleton, not an  
> eigenclass), can anyone think of any advantage/disadvantage to using  
> class variables over instance variables (or visa versa) to access data  
> in the class?

In answer to this question and the one about thread-specific singletons:  
another approach to consider is using a dependency injection framework.  
They all support singleton services, and at least some of them support  
services that return one unique object per thread.

One disadvantage to using class variables (@@var) is that they are (in  
the current ruby) per-hierarchy, not per class. So a subclass will share  
the value of @@var. This is, I’ve heard, going to change in ruby 2.0.

---

<div class="post-metadata">

**Author:** ![Caleb\_T](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/977dab/32.png) [@Caleb\_T](https://www.ruby-forum.com/u/Caleb_T)\
**Post date:** [December 20, 2005, 3:50am UTC](https://www.ruby-forum.com/t/singleton-class-instance-or-class-variables/50694/4 "2005-12-20T03:50:12Z")

</div>

On Tue, 20 Dec 2005, Caleb T. wrote:

> When using a singleton class (one that includes Singleton, not an  
> eigenclass), can anyone think of any advantage/disadvantage to using class  
> variables over instance variables (or visa versa) to access data in the  
> class?

inheritence will break with either.

with @@var then

class Singleton  
@@var = 42  
end

class SingletonII \< Singleton  
@@var = ‘forty-two’  
end

class Singleton  
p @@var #=\> ‘forty-two’  
end

but with @var

class Singleton  
@var = 42  
end

class SingletonII \< Singleton  
end

class SingletonII  
p @var #=\> nil  
end

my traits lib solves this - if inheritence of class data is important.  
it may  
not be.

regards.

-a
