Okamžitosť a metóda inicializácie

01

z 02

Okamžitosť a metóda inicializácie

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

Keď v Ruby definujete triedu, Ruby priradí novému objektu triedy konštanta názvu triedy. Napríklad, ak ste mali povedať triedna osoba; koniec, je to zhruba rovnocenné Osoba = Class.new. Tento objekt triedy je typu Trieda, a má množstvo metód užitočných na vytváranie kópií týchto kópií.

02

z 02

Vytváranie inštancií

Ak chcete vytvoriť novú inštanciu triedy, zavolajte tejto triede Nový metóda. V predvolenom nastavení to pridelí požadovanú pamäť pre triedu a vráti odkaz na nový objekt. Ak by ste teda chceli urobiť nový príklad človek triedy, zavolali by ste Person.new.

Zatiaľ čo na prvý pohľad to vyzerá trochu dozadu, neexistuje Nový kľúčové slovo v Ruby alebo v akejkoľvek špeciálnej syntaxi. Nové objekty sa vytvárajú normálnou metódou, ktorá, ako už bolo povedané a urobené, robí relatívne jednoduché veci.

Inicializácia inštancií

Prázdny objekt nie je príliš vzrušujúci. Ak chcete začať používať svoj objekt, musíte ho najprv inicializovať (za predpokladu, že má nejaký

instagram viewer
premenné inštancie ktoré je potrebné inicializovať). Robí sa to prostredníctvom internetu inicializáciu metóda. Ruby odovzdá všetky argumenty, ktorým odovzdáte SomeClass.new na inicializáciu na nový objekt. Potom môžete použiť normálne priradenia premenných a metódy na inicializáciu stavu objektu. V tomto príklade a človek je prezentovaná trieda, ktorej inicializáciu metóda vezme argument mena a veku a priradí ich premenným inštancie.

trieda Inicializácia osoby (meno, vek) @ meno, @age = meno, koniec veku vek bob = Person.new ('Bob', 34)

Túto príležitosť môžete využiť aj na získanie akýchkoľvek potrebných zdrojov. Otvorená sieť zásuvky, otvárať súbory, čítať všetky potrebné údaje atď. Jedinou výzvou je, že ľudia vo všeobecnosti neočakávajú inicializáciu metódy zlyhania. Nezabudnite zdokumentovať prípadné zlyhania inicializáciu metódy dôkladne.

Zničenie objektov

Vo Ruby vo všeobecnosti ničíte objekty. Ak prichádzate z jazyka C ++ alebo iného jazyka bez zberača odpadu, môže sa to zdať zvláštne. Ale v Ruby (a vo väčšine ostatných jazykoch zbieraných odpadky) ničíte objekty, jednoducho prestanete s odkazom na to. Pri nasledujúcom cykle zberu odpadu sa akýkoľvek objekt bez toho, aby naň odkazuje, automaticky zničí. Existujú nejaké chyby s kruhovými referenciami, ale vo všeobecnosti to funguje bezchybne a nepotrebujete ani „deštruktor“.

Ak vás zaujímajú zdroje, nemusíte sa obávať. Keď je zničený objekt držiaci prostriedok, zdroj bude uvoľnený. Otvorené súbory a sieťové pripojenia sa zatvoria, uvoľní sa pamäť atď. Iba ak pridelíte nejaké prostriedky v rozšírení C, budete sa skutočne musieť starať o pridelenie zdrojov. Nie je však zaručené, kedy bude zberač odpadu spustený. Za účelom prerozdelenia zdrojov v a príhodný skúste ich uvoľniť ručne.

Vytváranie kópií objektov

Ruby je odkazom. Ak odovzdáte odkaz na objekt a metódaa táto metóda volá metódu, ktorá upravuje stav tohto objektu, môžu sa vyskytnúť nezamýšľané následky. Ďalej môžu metódy uložiť odkaz na objekt, ktorý sa má modifikovať v oveľa neskoršom čase, čo spôsobuje oneskorenie účinku chyby. Aby sa tomu zabránilo, Ruby poskytuje niekoľko metód na duplikovanie objektov.

Ak chcete duplikovať akýkoľvek objekt, jednoducho zavolajte some_object.dup metóda. Bude pridelený nový objekt a všetky premenné inštancie objektu budú skopírované. Tomu sa však malo vyhnúť, aby sa zabránilo premenným inštancie inštancie: tomu sa hovorí „plytká kópia“. ak mali by ste držať súbor v premennej inštancie, oba duplikované objekty by teraz odkazovali na to isté file.

Len si uvedomte, že kópie sú plytké kópie pred použitím dup metóda. Pozri článok Vytváranie hlbokých kópií v Ruby Pre viac informácií.