Ruby: переменная является объектом в ruby?
Я слышал, что все в рубине является объектом. Я ответил в интервью, что переменная является объектом, и интервьюер сказал НЕТ. Кто-нибудь знает правду?
6 ответов
"В рубине все является объектом" - это в основном правда.
Но точнее сказать, что любое значение, которое может быть присвоено переменной или возвращено из метода, является объектом. Является ли переменная объектом? На самом деле, нет. Переменная - это просто имя объекта (также известного как "указатель"), которое позволяет вам найти его в памяти и что-то с ним делать.
shajin = Person.new()
В этом фрагменте у нас есть переменная shajin
, который указывает на объект (экземпляр класса person). Переменная - это просто идентификатор объекта, но не сам объект.
Я думаю, что это был вопрос с подвохом. В конечном счете, объектная ориентация - это особенность, позволяющая людям понимать сложные программы, но компьютеры сами по себе не объектно-ориентированы. Разверните достаточно слоев и объекты перестанут существовать на любом языке.
Так что, пожалуй, справедливее будет сказать: "В ruby все важное - это объект".
Почему бы не перейти непосредственно к источнику? Спецификация языка Ruby не может быть более ясной и очевидной (выделено мной):
6.2 Переменные
6.2.1 Общее описание
Переменная обозначается именем и относится к объекту, который называется значением переменной. Сама переменная не является объектом.
"Начнем с того, что Ruby является completely
объектно-ориентированный язык. Каждое значение является объектом (...)."(Язык программирования Ruby, Flanagan & Matsumoto, стр. 2). Обратите внимание, что в этой книге, созданной в соавторстве с создателем языка, не говорится" все является объектом ".
a = 1
1 - это объект, a - ссылка на 1-й объект. Если бы 'a' был сам по себе объектом, он бы имел собственный object_id. Но:
1.object_id #=> 3
a.object_id #=> 3
Кроме того, методы на самом деле не являются объектами (но вы можете превратить их в объекты при необходимости).
http://www.techotopia.com/index.php/Understanding_Ruby_Variables
"Переменная в Ruby - это просто метка для контейнера. Переменная может содержать практически все - строку, массив, хэш. Имя переменной может содержать только строчные буквы, цифры и подчеркивания. В идеале имя переменной должно иметь смысл в контексте вашей программы."
Ответы @Alex Wayne и @Jörg W Mittag верны, но я хотел бы добавить, что "не все" важно - это объект. Подобный метод и блок не являются объектами, но могут быть преобразованы в объекты с method
Метод и процесс соответственно.
http://www.ruby-lang.org/en/about/
"В Ruby все является объектом. Каждому кусочку информации и кода могут быть присвоены свои свойства и действия".