In Ruby, the double at-sign (@@
) before a variable name (e.g. @@variable_name
) is used to create a class variable. These variables are:
- Static — i.e. only a single copy of the variable exists, regardless of however many instances of the class you create;
- Globally scoped within the context of inheritance hierarchy — i.e. they're shared between a class and all its subclasses.
For example, consider the following class where a counter
is incremented each time a new object is instantiated:
class Entity
@@counter = 0
def initialize
@@counter += 1
puts "There are #{@@counter} entities"
end
end
a = Entity.new
b = Entity.new
c = Entity.new
# output:
# "There are 1 entities"
# "There are 2 entities"
# "There are 3 entities"
You should use class variables with caution as all subclasses inherit the same class variables from its superclass, which can lead to unexpected/confusing results.
This post was published (and was last revised ) by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.