跳到内容

类变量

类变量与类相关联,而不是与实例相关联。它们以两个“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  # => []

类变量也可以与模块和结构体相关联。如上所述,它们被包含/子类化类型继承。