跳至內容

類別變數

類別變數與類別關聯,而不是與實例關聯。它們以兩個「@」符號(@@)作為前綴。例如

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  # => []

類別變數也可以與模組和結構關聯。與上面相同,它們會被包含/子類別化的類型繼承。