Недавно я начал изучать рубин. Меня путают между методами класса, методами экземпляра, переменными экземпляра и переменными класса. Я много гугл, но я не получил разъяснений по этим вопросам. Любая помощь вместе с примерами будет оценена по достоинству.Разница между методом класса, методом экземпляра, переменной экземпляра, переменной класса?
ответ
Сначала посмотрите на этой диаграмме:
Вы можете справедливо сказать, что «OBJ имеет в метод под названием my_method(),» это означает, что вы в состоянии назвать OBJ .my_method(). В отличие от этого, вы не должны говорить, что «MyClass имеет метод с именем my_method()». Это было бы странно, потому что это означало бы, что вы можете вызвать MyClass.my_method(), как если бы это был метод класса.
Для устранения неоднозначности, следует сказать, что my_method() является методом экземпляра (а не только «метод») из MyClass, что означает, что он определен в MyClass, и вы на самом деле нужен экземпляр MyClass позвонить Это. Это тот же метод, но когда вы говорите о классе, вы называете его методом экземпляра, и когда вы говорите об объекте, вы просто называете его методом. Помните это различие, и вы не запутаться при написании интроспективную кода, как это: переменный экземпляр
String.instance_methods == "abc".methods # => true String.methods == "abc".methods # => false
объекта живут в самом объекте, и методы объекта живут в классе объекта. Вот почему объекты одного и того же класса совместно используют методы, но не разделяют переменные экземпляра.
я запутался между методами класса, методы экземпляра,
Там нет такого понятия, как «метод класса» в Ruby. Существует только один вид методов: методы экземпляра.
Рубистов иногда будет говорить о «методах класса», но это лишь удобное имя, которое используется для обозначения «методы экземпляра класса одноплодного из экземпляра класса Class
». Это довольно много, и мы сократим его до «методов класса», но мы прекрасно знаем, что методы класса не существуют на языке Ruby.
переменные экземпляра и переменные класса.
Действительно, различие в значительной степени зависит от того, что он говорит на олове: переменные экземпляра относятся к объектам (например, экземпляры), тогда как переменные класса относятся к классам. Фактически переменные класса имеют довольно широкий диапазон: переменная класса видна внутри класса, в котором он определен, все его экземпляры, все его подклассы, все экземпляры его подклассов, все подклассы подклассов, все экземпляры всех подклассы подклассов и т. д. и т. д. В основном переменные класса видны через всю иерархию классов и все прямые и косвенные экземпляры.
Обратите внимание, что классы являются объектами, как и любые другие, они также являются экземплярами (класса Class
). Это означает, что они также могут иметь переменные экземпляра, как и все другие объекты. В 99% случаев, когда вы считаете, что хотите переменную класса, вам действительно нужна переменная экземпляра класса.
- 1. Инициализация переменной экземпляра методом из класса
- 2. Разница между свойством и методом экземпляра
- 3. Разница между переменной класса Ruby и переменной экземпляра
- 4. В чем разница между определением переменной экземпляра класса в классе и методом. Зачем?
- 5. Разница между переменной уровня класса и методом для CA2000 Предупреждение
- 6. Разница между методом геттера и методом, который возвращает состояние переменной экземпляра?
- 7. python переопределяет метод класса с методом экземпляра
- 8. Метод класса, успешно вызванный методом экземпляра
- 9. В чем разница между функцией модуля, методом экземпляра и методом класса в Ruby-модулях?
- 10. Разница между методами класса и методами экземпляра?
- 11. переменной экземпляра в методе класса
- 12. python: вызов класса экземпляра переменной
- 13. Доступ к переменной экземпляра класса
- 14. Объем переменной экземпляра метода класса
- 15. Внутренняя переменная переменной экземпляра класса
- 16. Разница Java между переменной расширения и экземпляра
- 17. Понимание переменной экземпляра класса и класса python
- 18. Установка переменной экземпляра класса расширенного класса
- 19. JavaScript: создание и уничтожение экземпляра класса методом класса
- 20. Создание экземпляра класса с переменной в Python
- 21. Разница между инициализацией методом класса суперкласса vs init методом
- 22. Создание экземпляра класса с переменной в Python
- 23. Разница между локальной переменной и переменной, вызванной методом? C#
- 24. Доступ к переменной экземпляра класса извне
- 25. Использование переменной для экземпляра класса имя C#
- 26. confused между переменной экземпляра и локальной переменной
- 27. Как связать член экземпляра с методом экземпляра?
- 28. разница между переменной класса и атрибутом класса
- 29. Проблемы с методом класса
- 30. Доступ к переменной экземпляра класса java
Huh. Когда я google что-то вроде «ruby, что такое переменная экземпляра», я вижу тонны соответствующей информации. – orde
Возможная дубликация переменной экземпляра класса Ruby vs. переменной класса (http://stackoverflow.com/questions/15773552/ruby-class-instance-variable-vs-class-variable) – davidhu2000