При присвоєнні змінної змінній у Ruby створюється посилання на об'єкт, а не нова копія об'єкта. Це означає, що об'єкт не копіюється, а просто створюється ще одне посилання на той самий об'єкт. Таке поведінка часто називається "передачею за посиланням" (pass by reference).
Наприклад, якщо ми маємо такий код:
a = [1, 2, 3]
b = a
Тут a і b будуть посилатися на той самий об'єкт [1, 2, 3], а не на його копію. Тому будь-які зміни, які ми робимо в a, також впливають на b, і навпаки.
Посилання на об'єкт у Ruby - це просто посилання на місце в пам'яті, де зберігається сам об'єкт. Ви не можете прямо подивитися на посилання, так як це абстракція мови програмування, але ви можете працювати з ним через змінні, які вказують на об'єкт.
Посилання на об'єкт зберігається в пам'яті, поки існує хоча б одне посилання на цей об'єкт. Якщо всі посилання на об'єкт видаляються (наприклад, змінна видаляється або змінюється на інший об'єкт), то об'єкт стає недоступним і може бути автоматично видалений системою сміття (
garbage collector) для вивільнення пам'яті.
У Ruby немає явного керування пам'яттю, тому ви не повинні дбати про вивільнення пам'яті для об'єктів, які вже не використовуються. Це робить програмування більш простим і менше вразливим до помилок, пов'язаних з управлінням пам'яттю.
Використання методу object_id
У Ruby, коли ви маєте об'єкт, ви не можете просто "переглянути посилання на нього", так як у вас немає прямого доступу до адреси в пам'яті, де зберігається цей об'єкт. Ruby робить всі штуки в пам'яті за вас, тому ви не можете отримати доступ до адреси пам'яті об'єкта напряму.
Однак ви можете отримати деяку інформацію про об'єкт, використовуючи метод об'єкта
object_id, який поверне унікальний ідентифікатор об'єкта у вигляді рядка.
Наприклад, якщо у вас є об'єкт a, ви можете вивести його ідентифікатор так:
a.object_id=> 7100
b.object_id=> 7100
Пам'ятаємо, що
b - це не окремий об'єкт в пам'яті, а посилання на інший (ми це зробили за допомогою
b = a).
Зверніть увагу, що це не те саме, що "переглянути посилання на об'єкт", а просто спосіб отримати унікальний ідентифікатор об'єкта у Ruby. Зазвичай це робиться під час роботи, щоб
дебажити роботу коду.