У этого безумия есть метод ...
class Example
@foo # class instance variable
@@bar # class variable
def fun1
@baz # instance variable
end
end
Переменные экземпляра
Переменные экземпляра (@foo
и @baz
в примере) всегда начинаются с @
и они всегда принадлежат независимо от того, какой объект self ссылается на : либо объект класса, либо объект Class, представляющий класс.Ссылка на переменную экземпляра в определении класса или методе класса полностью отличается от ссылки на переменную экземпляра в методе экземпляра.
Наследование Поскольку переменные экземпляра не определены классом, они не связаны с механизмом наследования - они просто создаются, когда им присваивается значение.Переменные экземпляра класса, являющиеся просто переменными экземпляра объекта Class, представляющего класс, таким образом, не наследуются.
Переменные класса
Переменные класса видны и совместно используются методами класса и методами экземпляра класса, а также самим определением класса.Переменные класса могут использоваться в методах экземпляра, методах класса и в самом определении класса вне любого метода. Переменные класса всегда оцениваются со ссылкой на объект класса, созданный с помощью оператора определения класса .
Переменная экземпляра класса против переменной экземпляра
Недостаток переменных экземпляра классачто они не могут быть использованы в методах экземпляра как переменные класса.Другим недостатком является возможность перепутать их с обычными переменными экземпляра.Преимущество переменных экземпляра класса над переменными класса связано с запутанным поведением переменных класса при создании подкласса существующего класса: если класс использует переменные класса, то любой подкласс может изменить поведение класса и всех его потомков, изменив значениепеременной общего класса.Это сильный аргумент в пользу использования переменных экземпляра класса вместо переменных класса.
Многое из этого - из превосходного "языка программирования Ruby" альтернативный текст http://ecx.images -amazon.com / images / I / 517LDwIEYwL._SL75_.jpg