Другие языки программирования и технологии

Ruby, может тут кто ответит, т. к. не я один таким вопросом задаюсь.. . тоже нашел вопрос в сети.. . как уж так...

Основная (и единственная? ) разница между переменной класса и инстансной переменной класса в том, что переменная класса расшарена на экземпляры класса, а при наследовании от класса еще и на классы-потомки и их экземпляры.
Что касается практического применения. Инстансной переменной класса можно задать аццессор в контексте метакласса:

class Foo
class << self
attr_accessor :bar
end
end

Теперь можно получать к ней доступ отовсюду через Foo.bar и Foo.bar = как если бы мы работали с переменной класса.
На практике есть три сходные техники для взаимодействия с объектами между разными контекстами:
1. Константа класса - используется если нужно задать константное значение

2. Переменная класса - если значение нужно изменяеть

3. Инстансная переменная класса - используют по аналогии с переменной класса.
ММ
Марат Мукатаев
33 164
Лучший ответ
самая "коварная" вещь у переменных класса в том,
что при наследовании она будет "расшарена" не только "на
классы-потомки и их экземпляры", но и на суперклассимеем (супер) класс:
class Polygon
@@sides = 10
def self.sides
@@sides
end
end

выводим на печать переменную sides:
puts Triangle.sides # => 10 ничего удивительного.

теперь создаём подкласс:
class Triangle < Polygon
@@sides = 3
end

а теперь посмотрим что внутри переменной sides для каждого из этих классов:
puts Triangle.sides# => 3
puts Polygon.sides #=> 3

хм. . непонятушки. . если бы в джаве точно такое было, я бы повесился. . (очень напоминает статические переменные) либо я чего-то не так понял. .

http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/
Иван Паршенко сюда же кину http://habrahabr.ru/post/167457/