Class variables are associated to classes instead of instances. They are prefixed with two "at" signs (
@@). For example:
class Counter @@instances = 0 def initialize @@instances += 1 end def self.instances @@instances end end Counter.instances #=> 0 Counter.new Counter.new Counter.new Counter.instances #=> 3
Class variables can be read and written from class methods or instance methods.
Their type is inferred using the global type inference algorithm.
Class variables are always associated to a single type and are not inherited:
class Parent @@counter = 0 end class Child < Parent def self.counter # Error, can't infer the type of class variable # '@@counter' of Child @@counter end end
Class variables can also be associated to modules and structs. Like above, they are not inherited by including types.