Instantacija in metoda inicializacije

01

z dne 02

Instantacija in metoda inicializacije

Učenje Ruby na tirnicah: igranje z irb
brnzwngs / Flikr / CC BY 2.0

Ko v Rubyju določite razred, Ruby dodeli nov predmet razreda konstanta imena razreda. Na primer, če bi rekli Oseba razreda; konec, to je približno enako Oseba = Razred.Novo. Ta predmet razreda je tipa Razredin vsebuje številne metode, koristne za izdelavo primerkov kopij teh primerkov.

02

z dne 02

Izdelava primerkov

Če želite narediti nov primerek razreda, pokličite ta razred novo metoda. Privzeto bo to dodelilo potreben pomnilnik za razred in vrnilo referenco na nov objekt. Torej, če bi naredili nov primerek Oseba razred, bi poklicali Oseba.Novo.

Čeprav se sprva to zdi nekoliko nazaj, ni novo ključna beseda v Rubyju ali kateri koli posebni skladnji. Novi predmeti so ustvarjeni po običajni metodi, ki vse povedano in storjeno počne razmeroma enostavne stvari.

Inicializacija primerkov

Prazen predmet ni ravno navdušujoč. Če želite začeti uporabljati svoj predmet, ga je treba najprej inicializirati (ob predpostavki, da ga ima

instagram viewer
primerke spremenljivk to je potrebno inicializirati). To se naredi prek inicializirati metoda. Ruby bo posredoval vse argumente, ki jim jih posredujete SomeClass.new na inicializirati na novem objektu. Nato lahko uporabite običajne dodelitve spremenljivk in metode za inicializiranje stanja predmeta. V tem primeru a Oseba razred je predstavljen čigav inicializirati bo vzela ime in starostni argument in jih dodelila spremenljivkam primerkov.

razred Person def inicializirati (ime, starost) @name, @age = ime, starost konec bob = Person.new ('Bob', 34)

To priložnost lahko uporabite tudi za pridobitev vseh potrebnih virov. Odprto omrežje vtičnice, odpiranje datotek, branje vseh podatkov, ki jih potrebujete itd. Edino opozorilo je, da ljudje na splošno ne pričakujejo inicializirati metode za neuspeh. Bodite prepričani, da dokumentirate morebitne napake inicializirati metode temeljito.

Usmerjanje predmetov

V Rubyju na splošno ne uničujete predmetov. Če prihajate iz C ++ ali drugega jezika brez smeti, se to morda zdi čudno. Toda v Rubyju (in večini drugih jezikov, zbranih s smeti) ne uničujete predmetov, preprosto se nehate sklicevati nanj. V naslednjem ciklu odvoza smeti se vsak predmet, ki se nanj ne nanaša, samodejno uniči. Obstaja nekaj napak s krožnimi referencami, vendar na splošno to deluje brezhibno in sploh ne potrebujete "uničevalca."

Če se sprašujete o virih, ne skrbite. Ko se objekt, ki hrani vir, uniči, bo vir osvobojen. Odprte datoteke in omrežne povezave bodo zaprte, pomnilnik je nameščen itd. Samo če dodelite kakršne koli vire v razširitvi C, boste resnično morali skrbeti za delitev virov. Čeprav ni zagotovila, kdaj se bo zbiral smeti. Za razporeditev virov v a pravočasno način, poskusite jih sprostiti ročno.

Izdelava kopij predmetov

Ruby je referenca. Če pošljete sklic na objekt na metodain ta metoda kliče metodo, ki spremeni stanje tega predmeta, lahko pride do nenamernih posledic. Nadalje lahko metode nato shranijo sklic na objekt, da ga spremenite v veliko poznejšem času, kar povzroči zakasnjen učinek za hrošče. Da bi se temu izognili, Ruby ponuja nekaj načinov za podvajanje predmetov.

Če želite podvojiti kateri koli predmet, preprosto pokličite some_object.dup metoda. Dodeljen bo nov objekt in prekopirane bodo vse spremenljivke primerka predmeta. Vendar pa naj bi se temu izognili kopiranju spremenljivk primerkov: temu se reče "plitva kopija." Če če bi datoteko hranili v spremenljivki primerka, bi se oba podvojena predmeta nanašala na isto mapa.

Zavedajte se le, da so kopije pred uporabo naprave dvoj metoda. Glej članek Izdelava globokih kopij v Rubyju za več informacij.