Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Czy Ruby tworzy nową kopię obiektu podczas przypisywania zmiennej do zmiennej?

Okładka posta: Czy Ruby tworzy nową kopię obiektu podczas przypisywania zmiennej do zmiennej?
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.

13 maj 07:11

Co oznacza zakres (scope) w zarządzaniu projektami IT?

meme code
meme code@memecode
Co to jest "rozprzestrzenienie zakresu" (Scope Creep / Skołp krip)?
13 maj 07:20

Co to jest "rozprzestrzenienie zakresu" (Scope Creep / Skołp krip)?

meme code
meme code@memecode
Co oznacza "Nattywny"?
22 maj 07:01

Co oznacza "Nattywny"?

meme code
meme code@memecode
Jak działa 'rails console --sandbox'?
23 maj 19:39

Jak działa 'rails console --sandbox'?

meme code
meme code@memecode
Do czego potrzebna jest baza danych CVE (Wspólne Luki i Ekspozycje)?
29 maj 08:05

Do czego potrzebna jest baza danych CVE (Wspólne Luki i Ekspozycje)?

meme code
meme code@memecode
29 maj 09:09

Jakie systemy operacyjne wspierają Ruby?

meme code
meme code@memecode
Jaka jest różnica między wartością bezpośrednią a referencją w Ruby?
29 maj 12:00

Jaka jest różnica między wartością bezpośrednią a referencją w Ruby?

meme code
meme code@memecode
Dlaczego kod Ruby zwraca nil po wykonaniu puts?
29 maj 20:30

Dlaczego kod Ruby zwraca nil po wykonaniu puts?

meme code
meme code@memecode
Jaka jest różnica między nil a false w Ruby?
29 maj 20:59

Jaka jest różnica między nil a false w Ruby?

meme code
meme code@memecode
Dlaczego pusty ciąg (string) w Ruby nie jest fałszem?
31 maj 14:39

Dlaczego pusty ciąg (string) w Ruby nie jest fałszem?

meme code
meme code@memecode
Zakres widoczności zmiennej lokalnej w Ruby
3 cze 16:46

Zakres widoczności zmiennej lokalnej w Ruby

meme code
meme code@memecode
Czym różni się int od bigint w Ruby? Minimalne i maksymalne wartości.
13 cze 06:37

Czym różni się int od bigint w Ruby? Minimalne i maksymalne wartości.

meme code
meme code@memecode