Ruby: переменная является объектом в ruby? - PullRequest
6 голосов
/ 05 декабря 2011

Я слышал, что все в ruby ​​является объектом. В интервью я ответил, что переменная является объектом, и интервьюер сказал НЕТ. Кто-нибудь знает правду?

Ответы [ 6 ]

12 голосов
/ 05 декабря 2011

«В ruby ​​все является объектом» в основном верно.

Но, точнее, я бы сказал, что любое значение, которое может быть присвоено переменной или возвращено из метода, является объектом.Является ли переменная объектом?На самом деле, нет.Переменная - это просто имя объекта (также известного как «указатель»), которое позволяет вам найти его в памяти и что-то с ним делать.

shajin = Person.new()

В этом фрагменте у нас есть переменная shajin, который указывает на объект (экземпляр класса person).Переменная - это просто идентификатор объекта, но не сам объект.

Я думаю, что это был хитрый вопрос.В конечном счете объектная ориентация - это особенность, позволяющая людям понимать сложные программы, но компьютеры сами по себе не являются объектно-ориентированными.Разверните достаточно слоев, и объекты перестанут существовать на любом языке.

Так что, возможно, будет более справедливо сказать: «В ruby ​​все важное является объектом».

11 голосов
/ 05 декабря 2011

Почему бы не перейти непосредственно к источнику?Спецификация языка Ruby не может быть более ясной и очевидной (выделено мной):

6.2 Переменные

6.2.1 Общее описание

Переменнаяобозначается именем, а относится к объекту, который называется значением переменной. Сама переменная не является объектом .

2 голосов
/ 05 декабря 2011

«Начнем с того, что Ruby является completely объектно-ориентированным языком. Каждое значение является объектом (...).» (Язык программирования Ruby, Flanagan & Matsumoto, стр. 2). Обратите внимание, что в этой книге, написанной в соавторстве с создателем языка, не говорится «все является объектом».

a = 1

1 - это объект, a - ссылка на 1-й объект. Если бы 'a' был сам по себе объектом, он бы имел собственный object_id. Но:

1.object_id #=> 3
a.object_id #=> 3

Кроме того, методы на самом деле не являются объектами (но вы можете превратить их в объекты при необходимости).

2 голосов
/ 05 декабря 2011

http://www.techotopia.com/index.php/Understanding_Ruby_Variables

"Переменная в Ruby - это просто метка для контейнера. Переменная может содержать почти все - строку, массив, хеш. Имя переменной может содержать только строчные буквы,цифры и подчеркивания. В идеале имя переменной должно иметь смысл в контексте вашей программы. "

0 голосов
/ 15 июля 2017

@ Ответы Алекса Уэйна и @ Jörg W Mittag верны, но я хотел бы добавить, что «не все» важно - это объект. Подобный метод и блок не являются объектами, но могут быть преобразованы в объекты с помощью method method и proc соответственно.

0 голосов
/ 05 декабря 2011

http://www.ruby -lang.org / ru / about /

"В Ruby все является объектом. Каждому биту информации и коду можно присвоить свои собственные свойства и действия. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...