类变量¶
类变量与类相关联,而不是与实例相关联。它们以两个“at”符号 (@@
) 为前缀。例如
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 Parent
@@numbers = [] of Int32
def self.numbers
@@numbers
end
end
class Child < Parent
end
Parent.numbers # => []
Child.numbers # => []
Parent.numbers << 1
Parent.numbers # => [1]
Child.numbers # => []
类变量也可以与模块和结构体相关联。如上所述,它们被包含/子类化类型继承。