Есть ли в Ruby переменные класса?

Имена переменных класса имеют префикс "@@". Переменные класса доступны и в методах объекта, и в методах класса.

  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.

Вход для пользователей