Объект класса сам по себе является экземпляром Class
.
A.class
#=> Class
Так что это действительно переменная экземпляра, только в самом классе A
, а не в экземплярах A
.Без метода доступа вы получите значение, подобное этому:
A.instance_variable_get('@x')
#=> 5
Разница между переменными класса (@@x
) и переменными экземпляра класса (@x
) состоит в том, что первые разделяются с подклассами, тогда как последниене являются:
class Test1 ; @@x = 5 ; end
class Test2 < Test1 ; end
Test2.class_variable_get('@@x')
#=> 5
Test1.class_variable_set('@@x', 1)
#=> 1
>> Test2.class_variable_get('@@x')
#=> 1
Этого не происходит с переменными экземпляра класса:
class Test3 ; @x = 5 ; end
class Test4 < Test 3 ; end
Test3.instance_variables
#=> [:@x]
>> Test4.instance_variables
#=> []