У меня возникли некоторые проблемы с пониманием концепции мелкой копии и метод #dup
Действительно ли создается мелкая копия?
У меня есть этот код
class MyObject
end
myObject1 = MyObject.new
myObject2 = MyObject.new
Я знаю, что это будет печатать ложь потому что я буду испытывать для объекта равенства, а не равенство значений
p myObject1 == myObject2
Но согласно definition пологой копии
.dup производит неглубокую копию obj - переменные экземпляра obj копируются, но не объекты, которые они ссылаются.
Я ожидал, что это печать верно, но он также печатает ложные
p myObject1 == myObject1.dup
Не является ли определение неправильно то? Не должно myObject1.dup
a instance variable
, которое указывает на тот же объект, что и myObject1
, за исключением явно нет?
Не совсем то, что я просил. То, что я хотел сказать, не означает, что это определение '.dup создает мелкую копию obj - копии экземпляров obj копируются, но не объекты, которые они ссылаются. 'Подразумевают, что' p myObject1 == myObject1.dup' должен print true? В основном, язык заставляет его звучать как '.dup' дублирует указатели, но они все же указывают на один и тот же объект. Получите то, что я прошу сейчас? –
О боже, я идиот. Большое спасибо! –
Но 'myObject' - это просто переменная (не переменная экземпляра), и в документации говорится, что' dup' копирует переменные экземпляра * внутри * 'obj'. 'myObject1' и' myObject1.dup' - совершенно разные объекты, и вы не предоставляете свой собственный '==', поэтому 'myObject1 == myObject1.dup' является' false'. Я также добавил немного разъяснений к моему ответу, поэтому я просто проигнорирую этот идиотский бит. –