類別變數¶
類別變數與類別關聯,而不是與實例關聯。它們以兩個「@」符號(@@
)作為前綴。例如
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 # => []
類別變數也可以與模組和結構關聯。與上面相同,它們會被包含/子類別化的類型繼承。