Edellinen Sisällysluettelo Seuraava
Ruby-muuttujien ymmärtäminen Rubyn numeroluokat ja muunnokset

Osta ja lataa tämän Ruby eBookin täydelliset PDF- ja ePub-painokset vain 8 dollarilla.99

Nyt kun olemme käsitelleet muuttujien perusteet Rubyssä, seuraava tehtävä on selittää Rubyn muuttujien laajuus.

Sisältö

Mikä on muuttujan laajuus?

Laajuusalue määrittää, mihin kohtaan ohjelmassa muuttujaa voidaan käyttää. Rubyssä on neljä muuttujan laajuustyyppiä: local, global, instance ja class. Lisäksi Rubyssä on yksi vakiotyyppi. Kukin muuttujatyyppi ilmoitetaan käyttämällä erikoismerkkiä muuttujan nimen alussa seuraavassa taulukossa esitetyllä tavalla.

.

Nimi alkaa nimellä Muuttujan laajuus
$ Globaalinen muuttuja
Instanssimuuttuja
tai _ Lokaali muuttuja
Vakio
@@ Luokkamuuttuja

Lisäksi, Rubyssä on kaksi pseudomuuttujaa, joille ei voida antaa arvoja. Nämä ovat nil, joka osoitetaan alustamattomille muuttujille, ja self, joka viittaa parhaillaan suoritettavaan objektiin. Tämän luvun loppuosassa tarkastelemme kumpaakin näistä muuttujien laajuuksia vuorollaan.

Ezoicraportoi tämä mainos

Ruby-muuttujan laajuuden havaitseminen

Muuttujan laajuuden voi ilmeisesti päätellä muuttujan laajuuden katsomalla sen nimeä. Joskus sinun on kuitenkin selvitettävä laajuus ohjelmallisesti. Hyödyllinen tekniikka muuttujan laajuuden selvittämiseen on käyttää metodia defined? defined? palauttaa viitattavan muuttujan laajuuden tai nil:n, jos muuttujaa ei ole määritelty nykyisessä kontekstissa:

x = 10=> 10defined? x=> "local-variable"$x = 10=> 10defined? $x=> "global-variable"

Rubyn paikalliset muuttujat

Lokaalit muuttujat ovat paikallisia siinä koodikonstruktiossa, jossa ne on ilmoitettu. Esimerkiksi metodissa tai silmukassa ilmoitettua paikallista muuttujaa ei voi käyttää kyseisen silmukan tai metodin ulkopuolella. Paikallisten muuttujien nimien on alettava joko alleviivauksella tai pienellä kirjaimella. Esimerkiksi:

loopcounter = 10_LoopCounter = 20

Rubyn globaalit muuttujat

Rubyn globaaleihin muuttujiin pääsee käsiksi mistä tahansa Ruby-ohjelmassa riippumatta siitä, missä ne on ilmoitettu. Globaalien muuttujien nimien edessä on dollarimerkki ($). Esimerkiksi:

$welcome = "Welcome to Ruby Essentials"

Globaalien muuttujien käyttöä ei suositella. Globaalien muuttujien ongelmana on se, että ne näkyvät missä tahansa ohjelmakoodissa ja niitä voidaan myös muuttaa mistä tahansa ohjelmassa. Tämä voi vaikeuttaa virheiden jäljittämistä.

On kuitenkin hyödyllistä tietää, että sinulla Ruby-kehittäjänä on käytettävissäsi joukko ennalta määriteltyjä globaaleja muuttujia, joiden avulla voit saada tietoa Ruby-ympäristöstä. Lyhyt yhteenveto jokaisesta näistä muuttujista on seuraavassa taulukossa.

.

Muuttujan nimi Muuttujan arvo
Viimeisimmän virheen sijainti
$_ Viimeisimmän virheen sijainti
$_ Viimeisimmän merkkijonon lukujono gets
$. Tulkin viimeksi lukeman rivin numero
$& Merkkijono, johon regexp on viimeksi vastannut
$~ Viimeisin täsmäävä merkkijono, alilausekkeiden joukkona
$n Viimeisen osuman n:s alilauseke (sama kuin $~)
$= Tapauskohtainen-epäherkkyyslippu
$/ Syötteen tietueen erotin
$\ Tulostietue erotin
Parhaillaan suoritettavan ruby-skriptitiedoston nimi
$* The komentoriviargumentit, joilla komentosarjaa kutsuttiin
$$ Ruby-tulkin prosessin tunnus
$? Viimeksi suoritetun lapsiprosessin poistumistilanne

Voidaan esimerkiksi suorittaa metodi gets ottaaksemme syötteen näppäimistöltä, ja sitten viitata $_-muuttujaan saadaksemme syötetyn arvon:

irb(main):005:0> getshello=> "hello\n"irb(main):006:0> $_=> "hello\n"

Vaihtoehtoisesti voisimme etsiä Ruby-tulkin prosessitunnuksen:

irb(main):007:0> $$=> 17403

Rubyn luokkamuuttujat

Luokkamuuttuja on muuttuja, joka on jaettu kaikkien luokan instanssien kesken. Tämä tarkoittaa, että vain yksi muuttujan arvo on olemassa kaikille tästä luokasta instantioiduille objekteille. Tämä tarkoittaa, että jos yksi objektin instanssi muuttaa muuttujan arvoa, uusi arvo muuttuu olennaisesti kaikille muille objektin instansseille.

Toinen tapa ajatella luokkamuuttujia on ajatella niitä globaaleina muuttujina yhden luokan kontekstissa.

Luokkamuuttujat ilmoitetaan liittämällä muuttujan nimen eteen kaksi @-merkkiä (@@). Luokkamuuttujat on alustettava luontihetkellä. Esimerkiksi:

@@total = 0

Rubyn instanssimuuttujat

Instanssimuuttujat ovat samanlaisia kuin luokkamuuttujat, paitsi että niiden arvot ovat paikallisia tietyille objektin instansseille. Jos esimerkiksi luokka sisältää instanssimuuttujan nimeltä @total, jos yksi objektin instanssi muuttaa @totalin nykyistä arvoa, muutos on paikallinen vain muutoksen tehneelle objektille. Muilla saman luokan objekteilla on omat paikalliset kopionsa muuttujasta, jotka ovat riippumattomia muissa objekteissa tehdyistä muutoksista.

Instanssimuuttujat ilmoitetaan Rubyssä liittämällä muuttujan nimeen yksi @-merkki:

@total = 10

Ruby Constant Scope

Rubyn konstantit ovat arvoja, jotka, kun niille on kerran annettu arvo, niitä ei saa muuttaa. Sanon pitäisi, koska Ruby eroaa useimmista ohjelmointikielistä siinä, että se sallii vakion arvon muuttamisen sen jälkeen, kun se on julistettu, vaikka tulkki protestoi hieman varoitusviestillä.

Luokan tai moduulin sisällä julistetut vakiot ovat käytettävissä missä tahansa kyseisen luokan tai moduulin kontekstissa. Luokan tai moduulin ulkopuolella julistetut vakiot saavat globaalin laajuuden.

Osta ja lataa tämän Ruby eBookin täydelliset PDF- ja ePub-painokset vain 8 dollarilla.99

Edellinen Sisällysluettelo Seuraava
Rubyn muuttujien ymmärtäminen Rubyn numeroluokat ja muunnokset

Vastaa

Sähköpostiosoitettasi ei julkaista.