![]() |
|
![]() ![]() ![]() |
|
MystDeim |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 22.10.2007 Где: Россия->Юбилей ный Репутация: нет Всего: нет |
Есть такой код:
И первый и второй блоки выводят:
Я знаю что в руби является всё объектами, но получается что в 1 случае b ссылается на a, а во втором наоборт? Теперь попробуем с числами:
И в 3 и в 4 случае всё одинаково:
Почему так? должно во второй раз должно же быть 1... --------------------
Учебные материалы для студентов http://studlab.org |
||||||||
|
|||||||||
shine |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 20.10.2006 Репутация: 3 Всего: 5 |
И у чисел и у строк в Ruby есть полезный атрибут object_id. Советую поэкспериментирвать с ним до и во время ваших опытов.
--------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin |
|||
|
||||
MystDeim |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 22.10.2007 Где: Россия->Юбилей ный Репутация: нет Всего: нет |
У чисел object_id всегда оказывается разный, получается ведут себя как обычные скалярные типы.
А у строк object_id одинаковый, еще проверил массивы, тоже самое. --------------------
Учебные материалы для студентов http://studlab.org |
|||
|
||||
shine |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 20.10.2006 Репутация: 3 Всего: 5 |
Вобщем, большинство переменных в руби - ссылки. Когда вы создаете переменные 'a = b = "some text"' вы создаете переменную b и присваиваете ей значение "some text". После этого вы создаете еще одну переменную a и присваиваете ей значение b которое является ссылкой на "some text". В результате вы получаете две ссылки на один объект(object_id) в памяти.
Если вы после этого присвоете a какое-то другое значение эта связь с b пропадет и вы сможете менять переменные независимо друг от друга. Если вы хотите создать две "истинно независимые" переменные с одинаковыми значениями вы можете использовать метод clone любого объекта:
После этого a и b будут указывать на разные объекты в памяти. Но создателям языка такая схема показалась слишком простой и они оторвались на целочисленных ![]() Но этого оказалось мало. Создатели языка решили прооптимизировать числа и сделали из них Singleton-ы. Каждое число - отдельный объект в памяти и все переменные с одинаковым целочисленным значением ссылаются на один и тот же объект в памяти. Само собой для этих Singleton-ов не работает метод clone по самой природе этих переменных. Вот такие дела. Страшно? ![]() --------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin |
|||
|
||||
niksan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 13.9.2009 Где: Воронеж Репутация: нет Всего: нет |
hine, очень увлекательно, спасибо ) Расскажите еще чего нить "эдакого", если не сложно ))
Или статейку подобную на хабр наваяйте, думаю, все почитают с удовольствием. Это сообщение отредактировал(а) niksan - 18.6.2010, 07:57 |
|||
|
||||
MystDeim |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 22.10.2007 Где: Россия->Юбилей ный Репутация: нет Всего: нет |
shine, Хотел сделать еще один эксперимент, но прочитал ваш пост еще раз внимательно и всё встало на места
![]() Посоветуйте почитать чего-нибуль про такие тонкости,
P.S.
Да... с руби шутки плохи! ![]() --------------------
Учебные материалы для студентов http://studlab.org |
||||
|
|||||
shine |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 20.10.2006 Репутация: 3 Всего: 5 |
Посоветовать что-то сложно т.к. в рунете толковых материалов по руби нет. Если нет проблем с английским и есть возможность немного заплатить то могу посоветовать серию видеокастов Дэйва Томаса. Там он рассказывает о внутреннем строении классов, модулей в руби, о наследовании и метапрограммировании. Вобщем весьма полезная информация. --------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Ruby: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |