Primerovne spremenljivke v Rubyju

Primere spremenljivk se začnejo z znakom (@) in se lahko sklicujejo samo znotraj metod razreda. Od lokalnih spremenljivk se razlikujejo po tem, da ne obstajajo v nobeni določeni Obseg. Namesto tega je podobna tabela spremenljivk shranjena za vsak primerek razreda. Spremenljivke primerka živijo znotraj primerka razreda, dokler ta primerek ostane živ, tako bodo spremenljivke primerka.

Na spremenljivke primerkov se lahko sklicuje v kateri koli metodi tega razreda. Vse metode razreda uporabljajo isti primerek spremenljivo tabelo, v nasprotju z lokalnimi spremenljivkami, kjer bo imela vsaka metoda drugačno tabelo spremenljivk. Do spremenljivk primerkov lahko dostopate, ne da bi jih predhodno definirali. To ne bo povzročilo izjeme, vrednost spremenljivke pa bo nič in če zaženete Ruby z., boste izdali opozorilo -w stikalo.

Ta primer prikazuje uporabo spremenljivk primerkov. Upoštevajte, da shebang vsebuje -w stikalo, ki bo natisnilo opozorila, če se pojavijo. Upoštevajte tudi nepravilno uporabo zunaj metode v obsegu razreda. To je napačno in razpravljamo spodaj.

instagram viewer

Zakaj je @test spremenljivka napačna? To je povezano s področjem uporabe in tem, kako Ruby stvari izvaja. V metodi se obseg spremenljivke primerka nanaša na poseben primerek tega razreda. Vendar pa je področje obsega (znotraj razreda, vendar zunaj kakršnih koli metod) razred primerka Obseg. Ruby izvaja hierarhijo razredov z instanciranjem Razred predmeti, torej obstaja a drugi primerek pri igri tukaj. Prvi primera je primerek Razred razred, in tukaj je @test bom šel. Druga stopnja je instanca TestClass, in tukaj je @ vrednost bom šel. To postane nekoliko zmedeno, vendar ne pozabite, da nikoli ne uporabljate @in substance_variables zunaj metod. Če potrebujete shrambo za vse razrede, uporabite @@ class_variables, ki se lahko uporablja kjer koli v obsegu razreda (znotraj ali zunaj metod) in se bo obnašal enako.

Običajno ne morete dostopati do spremenljivk primerkov zunaj predmeta. Na primer, v zgornjem primeru ne morete preprosto poklicati t. vrednost ali vrednost t za dostop do spremenljivke primerka @ vrednost. S tem bi se kršila pravila kapsulacija. To velja tudi za primere nadrejenih razredov, ne morejo dostopati do spremenljivk primerkov, ki pripadajo nadrejenemu razredu, čeprav so tehnično iste vrste. Da bi zagotovili dostop do spremenljivk primerkov, pribor metode je treba prijaviti.

Naslednji primer prikazuje, kako se lahko napišejo metode dodatne opreme. Vendar to upoštevajte Ruby ponuja bližnjico in ta primer obstaja samo zato, da vam pokaže, kako delujejo metode dostopa. Običajno ni mogoče videti takšnih metod, ki so napisane na tak način, razen če je za to potrebna kakšna dodatna logika.

Bližnjice naredijo stvari nekoliko lažje in bolj kompaktne. Obstajajo tri od teh pomožnih metod. Izvajati jih je treba v obsegu razreda (znotraj razreda, vendar zunaj kakršnih koli metod) in bodo dinamično definirali metode, podobno metodam, določenim v zgornjem primeru. Tu se ne dogaja nobena čarovnija in izgledajo kot ključne besede v jeziku, vendar dejansko samo dinamično definirajo metode. Tudi ti dodatki običajno spadajo v vrh razreda. Bralcu omogoči takojšen pregled nad tem, katere spremenljivke bodo na voljo zunaj razreda ali otroških razredov.

Obstajajo tri od teh metod. Vsak od njih sprejme seznam simbolov, ki opisujejo spremenljivke primerka, do katerih lahko dostopate.

  • attr_reader - Določite "bralne" metode, kot je ime metoda v zgornjem primeru.
  • attr_writer - Določite "pisateljske" metode, kot je starost = metoda v zgornjem primeru.
  • attr_accessor - Določite tako "bralni" kot "pisateljski" način.

Kdaj uporabljati spremenljivke Instance

Zdaj, ko veste, kaj so spremenljivke primerkov, kdaj jih uporabljate? Spremenljivke primerkov je treba uporabiti, ko predstavljajo stanje objekta. Ime in starost študenta, ocene, itd. Ne bi jih smeli uporabljati za začasno shranjevanje, za to so lokalne spremenljivke. Vendar bi jih morda lahko uporabili za začasno shranjevanje med klici metod za večstopenjske izračune. Če to počnete, boste morda želeli ponovno premisliti sestavo metode in namesto tega te spremenljivke pretvoriti v parametre metode.

instagram story viewer