01
z 02
Instancja i metoda inicjalizacji
Kiedy zdefiniujesz klasę w Ruby, Ruby przypisze nowy obiekt klasy do stała nazwy klasy. Na przykład, jeśli chcesz powiedzieć osoba klasowa; koniec, jest to mniej więcej odpowiednik Osoba = klasa. Nowa. Ten obiekt klasy jest tego typu Klasai posiada wiele metod przydatnych do tworzenia kopii tych wystąpień.
02
z 02
Tworzenie instancji
Aby utworzyć nową instancję klasy, wywołaj tę klasę Nowy metoda. Domyślnie przydzieli to wymaganą pamięć dla klasy i zwróci odniesienie do nowego obiektu. Więc jeśli miałbyś zrobić nową instancję Osoba klasa, zadzwonisz Person.new.
Choć na początku wydaje się to nieco wstecz, nie ma Nowy słowo kluczowe w Ruby lub w dowolnej specjalnej składni. Nowe obiekty są tworzone zwykłą metodą, która, wszystko powiedziane i zrobione, robi względnie proste rzeczy.
Inicjowanie instancji
Pusty przedmiot nie jest zbyt ekscytujący. Aby rozpocząć korzystanie z obiektu, należy go najpierw zainicjować (zakładając, że ma on jakiś obiekt)
zmienne instancji który wymaga inicjalizacji). Odbywa się to za pośrednictwem zainicjować metoda. Ruby przekaże wszelkie argumenty, które przekażesz SomeClass.new na zainicjować na nowym obiekcie. Następnie można użyć normalnych przypisań zmiennych i metod, aby zainicjować stan obiektu. W tym przykładzie a Osoba prezentowana jest klasa, której zainicjować Metoda pobierze argument nazwa i wiek i przypisze je do zmiennych instancji.klasa Person def initialize (imię, wiek) @nazwa, @ wiek = imię, koniec wieku bob = Person.new ('Bob', 34)
Możesz także skorzystać z tej okazji, aby zdobyć wszelkie potrzebne zasoby. Otwarta sieć gniazda, otwieraj pliki, wczytuj potrzebne dane itp. Jedynym zastrzeżeniem jest to, że ludzie na ogół nie oczekują zainicjować metody niepowodzenia. Pamiętaj, aby udokumentować wszelkie możliwe awarie zainicjować metody dokładnie.
Destinationing Objects
Ogólnie rzecz biorąc, nie niszczysz przedmiotów w Rubim. Jeśli pochodzisz z C ++ lub innego języka bez modułu wyrzucającego elementy bezużyteczne, może to wydawać się dziwne. Ale w języku Ruby (i większości innych śmieci) nie niszczysz obiektów, po prostu przestajesz się do nich odwoływać. W następnym cyklu wyrzucania elementów bezużytecznych każdy obiekt, do którego nie ma odniesienia, zostanie automatycznie zniszczony. Istnieje kilka błędów z okrągłymi odnośnikami, ale ogólnie działa to bezbłędnie i nawet nie potrzebujesz „destruktora”.
Jeśli zastanawiasz się nad zasobami, nie martw się o to. Gdy obiekt trzymający zasób zostanie zniszczony, zasób zostanie uwolniony. Otwarte pliki i połączenia sieciowe zostaną zamknięte, pamięć zostanie zwolniona itp. Tylko jeśli przydzielisz jakiekolwiek zasoby w rozszerzeniu C, naprawdę będziesz musiał się martwić o zwolnienie zasobów. Chociaż nie ma gwarancji, kiedy zostanie uruchomiony moduł wyrzucania elementów bezużytecznych. W celu zwolnienia zasobów w aktualny sposób, spróbuj je uwolnić ręcznie.
Wykonywanie kopii obiektów
Ruby jest przekazywany przez odniesienie. Jeśli przekażesz odwołanie do obiektu do metoda, a ta metoda wywołuje metodę modyfikującą stan tego obiektu, mogą wystąpić niezamierzone konsekwencje. Ponadto metody mogą następnie zapisać odwołanie do obiektu, aby zmodyfikować go znacznie później, powodując opóźniony efekt błędu. Aby tego uniknąć, Ruby udostępnia metody kopiowania obiektów.
Aby powielić dowolny obiekt, po prostu wywołaj some_object.dup metoda. Nowy obiekt zostanie przydzielony, a wszystkie zmienne instancji obiektu zostaną skopiowane. Jednak należy unikać kopiowania zmiennych instancji: nazywa się to „płytką kopią”. Gdyby miałeś przechowywać plik w zmiennej instancji, oba zduplikowane obiekty będą się teraz odnosić do tego samego plik.
Przed użyciem należy pamiętać, że kopie są płytkie dup metoda. Zobacz artykuł Wykonywanie głębokich kopii w Rubim po więcej informacji.