ГоловнаВсі публікаціїКатегоріїПро проєкт

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

Обкладинка нотатки: Чи створює 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. Зазвичай це робиться під час роботи, щоб дебажити роботу коду.
13.05.2024 07:11

Що означає скоуп (scope) в управлінні IT-проєктами?

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

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

meme code
meme code@memecode
Що означає "Нативний"?
22.05.2024 07:01

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

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

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

meme code
meme code@memecode
Для чого потрібна база даних CVE (Common Vulnerabilities and Exposures)?
29.05.2024 08:05

Для чого потрібна база даних CVE (Common Vulnerabilities and Exposures)?

meme code
meme code@memecode
29.05.2024 09:09

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

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

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

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

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

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

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

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

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

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

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

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

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

meme code
meme code@memecode