Я пишу простой кусок кода на ruby, но он работает не так, как я ожидал. Я думаю, что эта проблема возникает из-за неправильного понимания того, как работает ruby, в частности, как работает оператор присваивания по сравнению с другими языками. Вот что я написал:
@instance1 = @clock
@clock.tick!
@clock.tick!
@clock.tick!
@instance2 = @clock
puts " instace1.seconds: #{@instance1.seconds}, instance2.seconds: #{@instance2.seconds}"
'Clock' - это класс, имеющий значение в секундах, метод 'tick!' который увеличивает секунды на единицу, и метод 'seconds', который возвращает значение секунд. Секунды инициализируются как 0.
Теперь, когда я запускаю этот код, вывод:
"instace1.seconds: 3, instance2.seconds: 3"
Но результат, который я ожидаю получить:
"instance1.seconds: 0, instance2.seconds: 3"
Потому что я присвоил intance1 значения, которые @clock имел до Я изменил часы и после этого ничего не сделал для изменения @ instance1.
Для меня это означает, что в некоторых контекстах ruby назначает объекты в качестве указателей и что происходит неявное разыменование. Каковы эти контексты? (переменные класса ?, большие объекты?)
Как сделать явное назначение? Другими словами, как разыменовать переменную?
Как в C, я бы сделал что-то вроде:
*instance1 = *c
(хотя прошло уже много времени с арифметики указателей, так что это грубый пример