All original content is created in Ukrainian. Not all content has been translated yet. Some posts may only be available in Ukrainian.Learn more

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

Post cover: Чи створює Ruby нову копію об’єкта при присвоєнні змінної змінній?
Table of contentsClick link to navigate to the desired location
This content has not been translated yet.We're showing the original Ukrainian content below.
При присвоєнні змінної змінній у 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. Зазвичай це робиться під час роботи, щоб дебажити роботу коду.

This post doesn't have any additions from the author yet.

13 May 07:11

What does scope mean in IT project management?

meme code
meme code@memecode
Що таке "розповзання скоупу" (Scope Creep / Скоуп кріп)?
13 May 07:20

Що таке "розповзання скоупу" (Scope Creep / Скоуп кріп)?

meme code
meme code@memecode
What does "Native" mean?
22 May 07:01

What does "Native" mean?

meme code
meme code@memecode
Як працює 'rails console --sandbox'?
23 May 19:39

Як працює 'rails console --sandbox'?

meme code
meme code@memecode
What is the CVE (Common Vulnerabilities and Exposures) database for?
29 May 08:05

What is the CVE (Common Vulnerabilities and Exposures) database for?

meme code
meme code@memecode
29 May 09:09

Які операційні системи підтримують Ruby?

meme code
meme code@memecode
В чому різниця між immediate value та reference у Ruby?
29 May 12:00

В чому різниця між immediate value та reference у Ruby?

meme code
meme code@memecode
Чому Ruby код повертає nil після виконання puts?
29 May 20:30

Чому Ruby код повертає nil після виконання puts?

meme code
meme code@memecode
Яка різниця між nil і false в Ruby?
29 May 20:59

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

meme code
meme code@memecode
Чому порожній рядок (string) у Ruby не є false?
31 May 14:39

Чому порожній рядок (string) у Ruby не є false?

meme code
meme code@memecode
Область видимості локальної змінної в Ruby
03 Jun 16:46

Область видимості локальної змінної в Ruby

meme code
meme code@memecode
Чим відрізняється int та bigint в Ruby? Мінімальні та максимальні значення.
13 Jun 06:37

Чим відрізняється int та bigint в Ruby? Мінімальні та максимальні значення.

meme code
meme code@memecode