Основная (и единственная? ) разница между переменной класса и инстансной переменной класса в том, что переменная класса расшарена на экземпляры класса, а при наследовании от класса еще и на классы-потомки и их экземпляры.
Что касается практического применения. Инстансной переменной класса можно задать аццессор в контексте метакласса:
class Foo
class << self
attr_accessor :bar
end
end
Теперь можно получать к ней доступ отовсюду через Foo.bar и Foo.bar = как если бы мы работали с переменной класса.
На практике есть три сходные техники для взаимодействия с объектами между разными контекстами:
1. Константа класса - используется если нужно задать константное значение
2. Переменная класса - если значение нужно изменяеть
3. Инстансная переменная класса - используют по аналогии с переменной класса.
Другие языки программирования и технологии
Ruby, может тут кто ответит, т. к. не я один таким вопросом задаюсь.. . тоже нашел вопрос в сети.. . как уж так...
самая "коварная" вещь у переменных класса в том,
что при наследовании она будет "расшарена" не только "на
классы-потомки и их экземпляры", но и на суперклассимеем (супер) класс:
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/
что при наследовании она будет "расшарена" не только "на
классы-потомки и их экземпляры", но и на суперклассимеем (супер) класс:
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/
Похожие вопросы
- Вопрос о сети. Как отправитель узнает получил ли пакет получатель?
- Можно ли разрабатывать игры на Ruby, и нужно ли знать Python перед тем как учить Ruby.
- Программирование. Помогите разобраться с направлениями (Ruby, Java, JavaScript, С++, Python, PHP, QA)
- На чем лучше создавать сайт, Ruby или PHP?
- поддержка ruby on rails на локале
- Стоит ли учить ruby?
- Следует ли мне изучать Ruby? Много воды, но важной для меня.
- Вопрос касаемо анонимности в сети и в целом
- На каком языке написан сайт. Помимо html и css есть PHP,Java,Ruby и т. д. как узнать на каком языке написан сайт?
- не могу найти недопустимое имя файла это надо на вопрос в информатике ответить помогите