Что такое переменная класса как объекта?

В следующем примере:

  class Foo
    @a = 123   # (1)
    def foo
      p @a     # (2) ... nil, но не 123
    end
  end

Все классы в Ruby являются объектами класса Class, и у этих классов-объектов есть свои переменные объекта. В случае (1) @a - это переменная класса как объекта, а в случае (2) - это обычная переменная объекта, которая, не будучи инициализированной, равна nil. @a в случае (2) принадлежит принадлежит объекту класса Foo, а в случае (1) - объекту-классу Foo, который является объектом класса Class. Переменные объектов-классов недоступны из методов объекта.

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