Mojo Academy · Lekcja

Metoda __copyinit__

Zdefiniuj sposób kopiowania własnego typu.

Lekcja 2 z 413 kroki

Metoda __copyinit__ to bezpłatna lekcja Mojo Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Mojo Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Mojo Academy zawiera 4 lekcji w sumie.

Definiowanie sposobu kopiowania

Podczas kopiowania wartości Mojo wywołuje specjalną metodę o nazwie __copyinit__. Tworzy ona nową instancję na podstawie istniejącej. 📋

Uruchamiana przy przypisaniu

Za każdym razem, gdy dochodzi do kopiowania, na przykład przy zwykłym przypisaniu, uruchamia się __copyinit__. To mechanizm definiujący znaczenie kopiowania danego typu.

Sygnatura metody

Metoda otrzymuje nową instancję do wypełnienia oraz tylko do odczytu istniejącą wartość, z której ma kopiować. Każde pole nowej instancji należy ustawić samodzielnie.

fn __copyinit__(out self, existing: Self):
    self.x = existing.x

Inicjalizowanie każdego pola

Wewnątrz __copyinit__ należy nadać nowej instancji poprawne wartości wszystkich pól, zwykle odwzorowane z istniejącej instancji.

Kopie głębokie a płytkie

W przypadku danych na stercie wybór należy do Ciebie: skopiować wskaźnik albo zaalokować i sklonować bufor. Prawdziwa kopia głęboka zapewnia pełną niezależność.

Dlaczego niezależność ma znaczenie

Poprawna implementacja __copyinit__ gwarantuje, że kopia ma własne dane. Dzięki temu modyfikowanie kopii nigdy nie zmieni oryginału.

Często generowana automatycznie

Rzadko trzeba pisać tę metodę ręcznie. Oznaczenie typu jako Copyable pozwala Mojo automatycznie wygenerować __copyinit__ dla każdego pola.

@fieldwise_init
struct Point(Copyable):
    var x: Int

Kiedy napisać ją samodzielnie

Napisz __copyinit__ ręcznie tylko wtedy, gdy zachowanie domyślne jest niewłaściwe, na przykład gdy zarządzasz surowym buforem wymagającym klonowania.

Definiuje semantykę kopiowania

Ta metoda dosłownie sprawia, że typ jest kopiowalny. Bez niej Mojo nie może duplikować wartości przy przypisaniu.

Poprawnie i oszczędnie

Dobre __copyinit__ powinno być przede wszystkim poprawne, a następnie oszczędne. Kopiuj tylko to, co konieczne, aby duplikowanie nie było kosztowne.

Element bezpieczeństwa

W połączeniu z przenoszeniem __copyinit__ zapewnia Mojo przewidywalną semantykę wartości. Możesz dokładnie kontrolować sposób duplikowania danych.

Szybkie sprawdzenie

Sprawdźmy inicjalizator kopiowania.

Podsumowanie

__copyinit__ definiuje sposób, w jaki typ kopiuje sam siebie, tworząc niezależną instancję. Mojo często generuje tę metodę automatycznie, ale można ją dostosować. 🎯

Bezpłatny start

Ucz się Mojo dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Metoda __copyinit__” jest bezpłatna?

Tak — pełny tekst „Metoda __copyinit__” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Mojo Academy, przejdź na CoddyKit PRO. Kurs Mojo Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Metoda __copyinit__”?

Zdefiniuj sposób kopiowania własnego typu. Ćwiczysz Mojo Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Mojo Academy?

Nie wymagamy żadnego doświadczenia. Mojo Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Metoda __copyinit__”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Mojo Academy?

Tak. Każda lekcja Mojo Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Semantyka kopiowania a przenoszenia
  2. Metoda __copyinit__
  3. Metoda __moveinit__
  4. Niszczenie i __del__
← Powrót do Mojo Academy