Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
Przy przypisywaniu zmiennej do zmiennej w Ruby tworzony jest odnośnik do obiektu, a nie nowa kopia obiektu. Oznacza to, że obiekt nie jest kopiowany, a po prostu tworzony jest kolejny odnośnik do tego samego obiektu. Takie zachowanie często nazywane jest "przekazywaniem przez odnośnik" (pass by reference).
Na przykład, jeśli mamy taki kod:
a = [1, 2, 3] b = a
Tutaj a i b będą odnosić się do tego samego obiektu [1, 2, 3], a nie do jego kopii. Dlatego wszelkie zmiany, które wprowadzamy w a, wpływają również na b, i odwrotnie.
Odnośnik do obiektu w Ruby to po prostu odniesienie do miejsca w pamięci, gdzie przechowywany jest sam obiekt. Nie możesz bezpośrednio spojrzeć na odnośnik, ponieważ jest to abstrakcja języka programowania, ale możesz pracować z nim za pomocą zmiennych, które wskazują na obiekt.
Odnośnik do obiektu jest przechowywany w pamięci, dopóki istnieje przynajmniej jedno odniesienie do tego obiektu. Jeśli wszystkie odniesienia do obiektu zostaną usunięte (na przykład, zmienna zostanie usunięta lub zmieniona na inny obiekt), obiekt staje się niedostępny i może zostać automatycznie usunięty przez system zbierania śmieci (garbage collector) w celu zwolnienia pamięci.
W Ruby nie ma jawnego zarządzania pamięcią, więc nie musisz martwić się o zwalnianie pamięci dla obiektów, które nie są już używane. To sprawia, że programowanie jest prostsze i mniej podatne na błędy związane z zarządzaniem pamięcią.
Użycie metody object_id
W Ruby, gdy masz obiekt, nie możesz po prostu "zobaczyć odnośnika do niego", ponieważ nie masz bezpośredniego dostępu do adresu w pamięci, gdzie przechowywany jest ten obiekt. Ruby robi wszystkie rzeczy w pamięci za ciebie, więc nie możesz uzyskać dostępu do adresu pamięci obiektu bezpośrednio.
Jednak możesz uzyskać pewne informacje o obiekcie, używając metody obiektu object_id, która zwróci unikalny identyfikator obiektu w postaci ciągu.
Na przykład, jeśli masz obiekt a, możesz wyświetlić jego identyfikator w ten sposób:
a.object_id=> 7100 b.object_id=> 7100
Pamiętaj, że b nie jest oddzielnym obiektem w pamięci, a odniesieniem do innego (zrobiliśmy to za pomocą b = a).
Zauważ, że to nie to samo, co "zobaczyć odnośnik do obiektu", a po prostu sposób na uzyskanie unikalnego identyfikatora obiektu w Ruby. Zwykle robi się to podczas pracy, aby debugować działanie kodu.
Ten post nie ma jeszcze żadnych dodatków od autora.