What does "@@" mean?


#1

In a ruby class, what does a variable “@@name” mean? Does it mean static
variable? Does its subclass have access to this field?


#2

Hi –

On Sun, 18 Jan 2009, Zhao Yi wrote:

In a ruby class, what does a variable “@@name” mean? Does it mean static
variable? Does its subclass have access to this field?

It’s a class variable, which is actually a class-hierarchy variable
(shared between a class and its descendants), and also visible to all
the instances of all of those classes.

In other words, it’s a kind of class-hierarchy-scoped global. Think of
it as $$name :slight_smile:

David


David A. Black / Ruby Power and Light, LLC
Ruby/Rails consulting & training: http://www.rubypal.com
Coming in 2009: The Well-Grounded Rubyist (http://manning.com/black2)

http://www.wishsight.com => Independent, social wishlist management!


#3

David A. Black wrote:

It’s a class variable, which is actually a class-hierarchy variable
(shared between a class and its descendants), and also visible to all
the instances of all of those classes.

In other words, it’s a kind of class-hierarchy-scoped global. Think of
it as $$name :slight_smile:

David

Ok thanks. That’s why I always got error when access to this variable
outside of the class-hierarchy.


#4

On 18.01.2009 14:07, Zhao Yi wrote:

David A. Black wrote:

It’s a class variable, which is actually a class-hierarchy variable
(shared between a class and its descendants), and also visible to all
the instances of all of those classes.

In other words, it’s a kind of class-hierarchy-scoped global. Think of
it as $$name :slight_smile:

Ok thanks. That’s why I always got error when access to this variable
outside of the class-hierarchy.

Actually I would recommend against using this beast. There are some
subtle issues with regard to definition order. Better use an instance
variable of the class instance.

Kind regards

robert


#5

On Sun, Jan 18, 2009 at 11:28 AM, Robert K.
removed_email_address@domain.invalid wrote:

Actually I would recommend against using this beast. There are some subtle
issues with regard to definition order. Better use an instance variable of
the class instance.

‘Beast’ was a fun name for them. :slight_smile:
You can use like it like this:

http://gist.github.com/48743

Regards!


#6

On Sun, 18 Jan 2009 07:33:29 -0500, Zhao Yi wrote:

In a ruby class, what does a variable “@@name” mean? Does it mean static
variable? Does its subclass have access to this field?

“static variable” means different things in different contexts in C and
Java, but @@variables are roughly equivalent to those defined by
following Java code:

public class Foo{
private static int bar=0;
}