← головнаПрограмування

Чи створює Ruby нову копію об’єкта при присвоєнні змінної змінній?

Чи створює Ruby нову копію об’єкта при присвоєнні змінної змінній? Розглянемо принцип роботи assignment у Ruby.

ЗмістНатисність на посилання, щоб перейти до потрібного місця
При присвоєнні змінної змінній у 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. Зазвичай це робиться під час роботи, щоб дебажити роботу коду.

🔥 Більше дописів

Всі публікації
Що означає "Нативний"?
Терміни22 трав. '24, 07:01

Що означає "Нативний"?

Нативний що це таке? Дізнайтеся про значення терміну "нативний" з прикладами використання в різни...

Яка різниця між nil і false в Ruby?
Програмування29 трав. '24, 20:59

Яка різниця між nil і false в Ruby?

Яка різниця між nil і false в Ruby? Розглянемо принцип роботи та відмінності значень nil та false...