Okamžitost a metoda inicializace

01

02

Okamžitost a metoda inicializace

Učení Ruby on Rails: Hra s irb
brnzwngs / Flikr / CC BY 2.0

Když v Ruby definujete třídu, Ruby přiřadí novému objektu třídy konstanta názvu třídy. Například, pokud jste měli říct třída osoba; konec, to je zhruba ekvivalentní Osoba = Class.new. Tento objekt třídy je typu Třída, a má řadu metod užitečných pro vytváření instancí kopií těchto instancí.

02

02

Vytváření instancí

Chcete-li vytvořit novou instanci třídy, zavolejte do této třídy Nový metoda. Ve výchozím nastavení to přidělí požadovanou paměť pro třídu a vrátí odkaz na nový objekt. Takže, pokud byste měli udělat novou instanci Osoba třídy, mohli byste zavolat Person.new.

Zatímco na první pohled to vypadá trochu dozadu, neexistuje Nový klíčové slovo v Ruby nebo jakákoli speciální syntaxe. Nové objekty jsou vytvářeny normální metodou, která, jak bylo řečeno a uděláno, dělá relativně jednoduché věci.

Inicializace instancí

Prázdný objekt není příliš vzrušující. Abyste mohli začít používat váš objekt, musíte jej nejprve inicializovat (za předpokladu, že nějaký má

instagram viewer
proměnné instance to vyžaduje inicializaci). To se provádí prostřednictvím internetu inicializovat metoda. Ruby předá všechny argumenty, kterým předáte SomeClass.new na inicializovat na nový objekt. Potom můžete použít normální přiřazení proměnných a metody k inicializaci stavu objektu. V tomto příkladu a Osoba třída je prezentována jehož inicializovat metoda vezme argument jméno a věk a přiřadí je proměnným instance.

třída Person def inicializovat (jméno, věk) @name, @age = jméno, konec konce věku bob = Person.new ('Bob', 34)

Tuto příležitost můžete také využít k získání veškerých zdrojů, které budete potřebovat. Otevřená síť zásuvky, otevírat soubory, číst všechna potřebná data atd. Jedinou výzvou je, že lidé obecně neočekávají inicializovat metody selhání. Nezapomeňte zdokumentovat případné selhání inicializovat metody důkladně.

Destroying Objects

Obecně v Ruby ničíte objekty. Pokud přicházíte z jazyka C ++ nebo jiného jazyka bez sběratele odpadu, může se to zdát divné. Ale v Ruby (a ve většině ostatních jazyků sebraných na odpadky) objekty nezničíte, jednoduše na ně přestanete odkazovat. Při příštím cyklu sběru odpadu bude jakýkoli objekt, který na něj nebude odkazovat, automaticky zničen. Existuje několik chyb s kruhovými odkazy, ale obecně to funguje bezchybně a nepotřebujete ani "destruktor".

Pokud vás zajímají zdroje, nedělejte si s tím starosti. Když je zničen objekt, který drží prostředek, bude zdroj uvolněn. Otevřené soubory a síťová připojení budou uzavřeny, dislokace paměti atd. Pouze pokud přidělíte jakékoli prostředky v rozšíření C, budete se opravdu muset starat o přidělování zdrojů. Přesto však není žádná záruka, kdy bude sběrač odpadků spuštěn. Za účelem přidělování zdrojů v a aktuální zkuste je uvolnit ručně.

Vytváření kopií objektů

Ruby prochází referencí. Pokud předáte odkaz na objekt a metodaa tato metoda volá metodu, která mění stav tohoto objektu, mohou nastat nežádoucí důsledky. Dále mohou metody uložit odkaz na objekt, který se má modifikovat v mnohem pozdější době, což způsobí zpožděný účinek na chybu. Aby se tomu zabránilo, Ruby poskytuje některé metody pro duplikování objektů.

Chcete-li duplikovat jakýkoli objekt, jednoduše zavolejte some_object.dup metoda. Bude přidělen nový objekt a budou zkopírovány všechny proměnné instance objektu. Tomu se však mělo vyhýbat kopírování proměnných instance: tomu se říká „mělká kopie“. Li měli byste držet soubor v proměnné instance, oba duplikované objekty by nyní odkazovaly na to samé soubor.

Jen si uvědomte, že kopie jsou mělké kopie před použitím dup metoda. Viz článek Vytváření hlubokých kopií v Ruby Pro více informací.

instagram story viewer