Esimerkkimuuttujat alkavat merkillä at (@), ja niihin voidaan viitata vain luokkamenetelmissä. Ne eroavat paikallisista muuttujista siinä, että niitä ei ole missään tietyssä laajuus. Sen sijaan samanlainen muuttujien taulukko tallennetaan jokaiselle luokan esiintymälle. Ilmentymän muuttujat elävät luokan ilmentymän sisällä, niin kauan kuin kyseinen ilmentymä pysyy elossa, samoin ilmentymän muuttujat.
Esimerkki-muuttujiin voidaan viitata missä tahansa luokan menetelmässä. Kaikki luokan menetelmät käyttävät samaa ilmentymää muuttuva taulukko, toisin kuin paikalliset muuttujat, joissa jokaisella menetelmällä on erilainen muuttujataulukko. Ilmentymän muuttujia on kuitenkin mahdollista käyttää määrittelemättä niitä ensin. Tämä ei aiheuta poikkeusta, mutta muuttujan arvo on nolla ja varoitus annetaan, jos olet ajautunut Ruby kanssa -W vaihtaa.
Tämä esimerkki osoittaa esiintymämuuttujien käytön. Huomaa, että jittu sisältää -W kytkin, joka tulostaa varoituksia, jos niitä ilmenee. Huomaa myös vääränlainen käyttö menetelmän ulkopuolella luokan laajuudessa. Tämä on väärä ja siitä keskustellaan jäljempänä.
Miksi on @testata muuttuja väärä? Tämä liittyy laajuuteen ja siihen, miten Ruby toteuttaa asioita. Menetelmässä instanssimuuttujan laajuus viittaa kyseisen luokan erityiseen esiintymään. Luokan laajuudessa (luokan sisällä, mutta minkään menetelmän ulkopuolella) on kuitenkin luokka luokan esiintymä laajuus. Ruby toteuttaa luokkahierarkian pilkkomalla luokka esineitä, joten on a toinen oikeusaste täällä pelata. Ensimmäinen ilmentymä on esimerkki luokka luokka, ja täällä @testata tulee menemään. Toinen tapaus on TestClass, ja täällä @arvo tulee menemään. Tämä muuttuu hieman hämmentäväksi, mutta muista koskaan käyttää @instance_variables ulkopuolella menetelmiä. Jos tarvitset koko luokan säilytystilaa, käytä @@ class_variables, jota voidaan käyttää missä tahansa luokan laajuudessa (menetelmien sisällä tai ulkopuolella) ja käyttäytyvät samalla tavalla.
Et yleensä pääse käsiksi ilmentymän muuttujiin objektin ulkopuolelta. Esimerkiksi yllä olevassa esimerkissä et voi vain soittaa t.value tai t. @ arvo päästäksesi esiintymätietoihin @arvo. Tämä rikkoo kapselointi. Tämä koskee myös lasten luokkien ilmentymiä, he eivät voi käyttää vanhemmaluokkaan kuuluvia ilmentymimuuttujia, vaikka ne ovat teknisesti samantyyppisiä. Joten saadakseen pääsyn ilmentymän muuttujiin, ohjakse menetelmät on ilmoitettava.
Seuraava esimerkki osoittaa, kuinka lisälaitemenetelmät voidaan kirjoittaa. Huomaa kuitenkin se Rubiini tarjoaa pikakuvakkeen ja että tämä esimerkki on olemassa vain osoittamaan sinulle kuinka apuvälineet toimivat. Yleensä ei ole tavallista nähdä tällaisella tavalla kirjoitettuja apuvälineitä, ellei apulaitteille tarvita jonkinlaista lisälogiikkaa.
Pikavalinnat tekevät asioista hieman helpompia ja kompakteja. Näitä auttajamenetelmiä on kolme. Niitä on ajettava luokan laajuudessa (luokan sisällä, mutta ei minkään menetelmän ulkopuolella), ja ne määrittelevät dynaamisesti menetelmiä, kuten edellisessä esimerkissä määritellyt menetelmät. Täällä ei ole taikuutta, ja ne näyttävät kielen avainsanoilta, mutta ne todellakin määrittelevät vain dynaamisesti menetelmiä. Lisäksi nämä lisälaitteet menevät yleensä luokan huipulle. Se antaa lukijalle välittömän yleiskuvan siitä, mitkä jäsenmuuttujat ovat saatavilla luokan ulkopuolella tai lapsitunneille.
Näitä apuvälineitä on kolme. Kukin niistä ottaa luettelon symboleista, jotka kuvaavat esiintymämuuttujia, joille on tarkoitus päästä.
- attr_reader - Määrittele "lukija" -menetelmät, kuten nimi menetelmä yllä olevassa esimerkissä.
- attr_writer - Määrittele "kirjoittaja" - menetelmät, kuten ikä = menetelmä yllä olevassa esimerkissä.
- attr_accessor - Määrittele sekä lukija- että kirjoittajamenetelmät.
Milloin esiintymämuuttujia käytetään
Nyt kun tiedät, mitkä esiintymämuuttujat ovat, milloin käytät niitä? Esimerkkimuuttujia tulisi käyttää, kun ne edustavat objektin tilaa. Opiskelijan nimi ja ikä, heidän arvosanat jne. Niitä ei tule käyttää väliaikaiseen varastointiin, sille paikalliset muuttujat ovat. Niitä voidaan kuitenkin mahdollisesti käyttää väliaikaiseen varastointiin menetelmävaiheiden välillä monivaiheisissa laskennoissa. Jos teet tämän, kannattaa ehkä harkita menetelmän koostumusta uudelleen ja tehdä nämä muuttujat menetelmäparametreiksi.