Juhtumimuutujad rubiinides

Eksemplari muutujad algavad tähisega (@) ja neile saab viidata ainult klassimeetodite piires. Need erinevad kohalikest muutujatest selle poolest, et neid ei eksisteeri ühegi konkreetse sees ulatus. Selle asemel salvestatakse klassi iga eksemplari jaoks sarnane muutujate tabel. Eksemplaride muutujad elavad klassi eksemplari piires, nii kaua kui see eksemplar püsib, kehtivad ka eksemplari muutujad.

Eksemplari muutujatele saab viidata selle klassi mis tahes meetodis. Kõik klassi meetodid kasutavad sama eksemplari muutuv tabel, erinevalt kohalikest muutujatest, kus igal meetodil on erinev muutujate tabel. Juhtumimuutujatele on siiski võimalik juurde pääseda, ilma neid kõigepealt määratlemata. See ei tõsta erandit, kuid muutuja väärtus on null ja kui olete Ruby'ga koos käinud, antakse hoiatus -w lüliti.

See näide näitab esinemismuutujate kasutamist. Pange tähele, et shebang sisaldab -w lüliti, mis prindib hoiatused nende ilmnemisel. Samuti arvestage klassi ulatuses vale kasutamisega väljaspool meetodit. See on vale ja seda arutatakse allpool.

instagram viewer

Miks see on? @test muutuja vale? See on seotud ulatuse ja sellega, kuidas Ruby asju rakendab. Meetodi piires viitab eksemplari muutuja ulatus selle klassi konkreetsele eksemplarile. Klassi ulatuses (klassisiseselt, kuid väljaspool mis tahes meetodeid) on siiski klass klassi instants ulatus. Ruby rakendab klasside hierarhiat värskendamise teel Klass objekte, seega on olemas a teisel astmel siin mängida. Esimene näiteks on näide Klass klass ja see on koht, kus @test läheb. Teine näide on TestClass, ja see on koht, kus @ väärtus läheb. See läheb natuke segaseks, kuid pidage meeles, et seda ei tohi kunagi kasutada @instance_variables väljaspool meetodeid. Kui vajate kogu klassi ladustamist, kasutage @@ klassi_muutujad, mida saab kasutada kõikjal klassis (meetodite sees või väljaspool) ja mis käituvad samamoodi.

Tavaliselt ei pääse te objektivälistest muutujatest juurde. Näiteks ülaltoodud näites ei saa te lihtsalt helistada t.väärtus või t. @ väärtus esinemismuutujale juurde pääsemiseks @ väärtus. See rikuks reegleid kapseldamine. See kehtib ka lasteklasside esinemisjuhtude kohta, nad ei pääse juurde vanemklassi kuuluvatele esinemismuutujatele, isegi kui nad on tehniliselt sama tüüpi. Seega, selleks et võimaldada juurdepääsu esinemismuutujatele, ligipääs meetodid tuleb deklareerida.

Järgmine näide demonstreerib, kuidas juurdepääsumeetodeid saab kirjutada. Pange aga tähele Rubiin pakub otsetee ja see näide eksisteerib ainult selleks, et näidata teile, kuidas juurdepääsumeetodid toimivad. Üldiselt pole tavaline, et juurdepääsumeetodeid sel viisil kirjutatakse, välja arvatud juhul, kui nende jaoks on vaja mingit täiendavat loogikat.

Otseteed muudavad asja natuke lihtsamaks ja kompaktsemaks. Neid abistajaviise on kolm. Neid tuleb juhtida klassi ulatuses (klassisiseselt, kuid väljaspool mis tahes meetodeid) ja need määratlevad dünaamiliselt meetodid, nagu ülaltoodud näites määratletud meetodid. Siin ei toimu maagiat ja need näevad välja nagu keele märksõnad, kuid tegelikult on need lihtsalt dünaamiliselt määravad meetodid. Ka need aksessuaarid lähevad tavaliselt klassi tippu. See annab lugejale kohest ülevaadet sellest, millised liikmesmuutujad on saadaval väljaspool klassi või lasteklassides.

Neid juurdepääsumeetodeid on kolm. Mõlemad võtavad loendi sümbolitest, mis kirjeldavad ligipääsetavaid esinemismuutujaid.

  • attr_reader - määratleda "lugeja" meetodid, näiteks nimi meetod ülaltoodud näites.
  • attr_writer - määratleda "kirjutaja" meetodid, näiteks vanus = meetod ülaltoodud näites.
  • attr_accessor - määratlege nii lugeja kui ka kirjutaja meetodid.

Millal kasutada astmemuutujaid?

Nüüd, kui teate, mis on esinemismuutujad, millal te neid kasutate? Eksemplarimuutujaid tuleks kasutada siis, kui need tähistavad objekti olekut. Õpilase nimi ja vanus, hinded jne Neid ei tohiks ajutiseks säilitamiseks kasutada, selleks on mõeldud kohalikud muutujad. Neid saaks siiski kasutada ajutiseks säilitamiseks meetodikõnede vahel mitmeastmeliseks arvutamiseks. Kuid kui te seda teete, võiksite oma meetodi koostise ümber mõelda ja muuta need muutujad meetodi parameetriteks.

instagram story viewer