Есть ли в Ruby переменные класса?
чт, 02/08/2007 - 20:11 — spine
Имена переменных класса имеют префикс "@@". Переменные класса доступны и в методах объекта, и в методах класса.
class CountEm
@@children = 0
def initialize
@@children += 1
@myNumber = @@children
end
def whoAmI
"I'm child number #@myNumber (out of #@@children)"
end
def CountEm.totalChildren
@@children
end
end
c1 = CountEm.new
c2 = CountEm.new
c3 = CountEm.new
c1.whoAmI
c3.whoAmI
CountEm.totalChildren
В самых старых версиях Ruby не было переменных класса, однако с таким же успехом можно использовать объект класса-контейнера
(Array, Hash и т.д.), который присвоен константе в определении класса. Следующий пример использует массив. Некоторые предпочитают хеши:
class Foo
F = [ 0 ] # pseudo class variable - Array 'F'
def foo
F[0] += 1
puts F[0]
end
end
F[0] теперь содержит число вызовов метода foo во всех объектах класса Foo.
