Spremenljivke primerkov v spremenljivkah Ruby
H&S Produktion / Getty Images
Spremenljivke primerka se začnejo z znakom at (@) in se nanje lahko sklicujete samo znotraj metod razreda. Od lokalnih spremenljivk se razlikujejo po tem, da ne obstajajo znotraj nobene posebnosti Obseg . Namesto tega je za vsak primerek razreda shranjena podobna tabela spremenljivk. Spremenljivke primerka živijo znotraj primerka razreda, tako da dokler bo ta primerek živ, bodo živele tudi spremenljivke primerka.
Na spremenljivke primerka se lahko sklicujete v kateri koli metodi tega razreda. Vse metode razreda uporabljajo isti primerek variabilna tabela , v nasprotju z lokalnimi spremenljivkami, kjer bo imela vsaka metoda drugačno tabelo spremenljivk. Vendar je možno dostopati do spremenljivk instance, ne da bi jih predhodno definirali. To ne bo povzročilo izjeme, vendar bo vrednost spremenljivke nič in opozorilo bo izdano, če ste zagnali Ruby z -in stikalo.
Ta primer prikazuje uporabo spremenljivk primerka. Upoštevajte, da je shebang vsebuje -in stikalo, ki bo natisnilo opozorila, če se pojavijo. Upoštevajte tudi nepravilno uporabo zunaj metode v obsegu razreda. To je napačno in obravnavano spodaj.
Zakaj je @test spremenljivka napačna? To je povezano z obsegom in načinom, kako Ruby izvaja stvari. Znotraj metode se obseg spremenljivke primerka nanaša na določen primerek tega razreda. Vendar pa je v obsegu razreda (znotraj razreda, vendar zunaj vseh metod) obseg razredni primerek Obseg. Ruby implementira hierarhijo razredov z instanciranjem Razred predmetov, zato obstaja a druga stopnja v igri tukaj. Prvi primerek je primerek Razred razreda, in tukaj je @test bom šel. Drugi primer je instancacija TestClass , in to je kje @vrednost bom šel. To postane nekoliko zmedeno, vendar ne pozabite, da nikoli ne uporabite @instance_variables zunaj metod. Če potrebujete prostor za shranjevanje v celotnem razredu, uporabite @@spremenljivke_razreda , ki se lahko uporablja kjer koli v obsegu razreda (znotraj ali zunaj metod) in se bo obnašal enako.
Pripomočki
Običajno ne morete dostopati do spremenljivk primerka zunaj objekta. Na primer, v zgornjem primeru ne morete preprosto poklicati t.vrednost oz t.@vrednost za dostop do spremenljivke primerka @vrednost . S tem bi kršili pravila enkapsulacija . To velja tudi za primerke podrejenih razredov, ti ne morejo dostopati do spremenljivk primerka, ki pripadajo nadrejenemu razredu, čeprav so tehnično istega tipa. Torej, da bi zagotovili dostop do spremenljivk primerka, dostopnik metode morajo biti deklarirane.
Naslednji primer prikazuje, kako je mogoče napisati metode dostopnikov. Vendar upoštevajte, da Ruby ponuja bližnjico in da ta primer obstaja samo zato, da vam pokaže, kako delujejo metode dostopnika. Na splošno ni običajno videti metod dostopnika, zapisanih na ta način, razen če je za dostopnik potrebna nekakšna dodatna logika.
Bližnjice naredijo stvari nekoliko lažje in bolj kompaktne. Obstajajo tri od teh pomožnih metod. Zagnati jih je treba v obsegu razreda (znotraj razreda, vendar zunaj kakršnih koli metod), metode pa bodo dinamično definirale podobno kot metode, definirane v zgornjem primeru. Tu se ne dogaja nobena čarovnija in izgledajo kot jezikovne ključne besede, v resnici pa so samo dinamično definirajoče metode. Poleg tega so ti dodatki običajno na vrhu razreda. To daje bralcu takojšen pregled nad tem, katere spremenljivke članov bodo na voljo zunaj razreda ali podrejenim razredom.
Obstajajo trije od teh načinov dostopa. Vsak od njih ima seznam simbolov, ki opisujejo spremenljivke primerka, do katerih je treba dostopati.
Kdaj uporabiti spremenljivke primerkov
Zdaj, ko veste, kaj so spremenljivke primerkov, kdaj jih uporabljate? Spremenljivke primerka je treba uporabiti, ko predstavljajo stanje objekta. Ime in starost študenta, njegove ocene itd. Ne smejo se uporabljati za začasno shranjevanje, temu so namenjene lokalne spremenljivke. Vendar pa bi jih morda lahko uporabili za začasno shranjevanje med klici metod za večstopenjske izračune. Če pa to počnete, boste morda želeli ponovno razmisliti o sestavi svoje metode in te spremenljivke namesto tega spremeniti v parametre metode.