Visuotiniai kintamieji rubine

Visuotiniai kintamieji yra kintamieji prie kurių galima prisijungti iš bet kurios programos vietos, neatsižvelgiant į apimtį. Jie žymimi pradedant simboliu $ (dolerio ženklas). Vis dėlto globalių kintamųjų naudojimas dažnai laikomas „be Ruby“ ir retai juos matysite.

Apibrėžti globalius kintamuosius

Visuotiniai kintamieji yra apibrėžti ir naudojami kaip bet kuris kitas kintamasis. Norėdami juos apibrėžti, tiesiog priskirkite jiems vertę ir pradėkite juos naudoti. Tačiau, kaip rodo jų pavadinimas, priskyrimas globaliems kintamiesiems bet kuriame programos taške turi visuotinę reikšmę. Ši programa tai parodo. Metodas pakeis visuotinį kintamąjį, ir tai turės įtakos kaip antra metodas veikia.


$ greitis = 10. def pagreitinti. USD greitis = 100. galas. def pass_speed_trap. jei $ greitis> 65. # Suteikite programai greičio viršijimo bilietą. galas. galas. pagreitinti. pass_speed_trap. 

Nepopuliarus

Taigi kodėl šis „ne rubinas“ ir kodėl labai dažnai nematote globalių kintamųjų? Paprasčiau tariant, tai sulaužo kapsulę. Jei kuri nors klasė ar metodas gali savo noru pakeisti visuotinių kintamųjų būseną be jokio sąsajos sluoksnio, tai bet kuris kitos klasės ar metodai, kurie remiasi tuo globaliu kintamuoju, gali elgtis netikėtai ir nepageidaujamai būdas. Be to, tokią sąveiką gali būti labai sunku derinti. Kas pakeitė tą globalų kintamąjį ir kada? Peržiūrėsite gana daug kodo, kad sužinotumėte, kas tai padarė, ir to būtų galima išvengti nepažeidus kapsuliavimo taisyklių.

instagram viewer

Bet tai nereiškia, kad globalūs kintamieji yra niekada naudojamas Ruby. Yra daugybė specialių globalių kintamųjų su vienženkliais pavadinimais (a-la Perlas), kurį galima naudoti visoje jūsų programoje. Jie parodo pačios programos būseną ir daro tokius dalykus, kaip modifikuoti visų įrašų ir laukų atskyrėjus gauna metodai.

Visuotiniai kintamieji

  • $0 - Šis kintamasis, žymimas 0 USD (tai yra nulis), turi aukščiausio lygio scenarijaus, kuris vykdomas, pavadinimą. Kitaip tariant, scenarijaus failas, paleistas iš komandinė eilutė, o ne scenarijaus failas, kuriame yra šiuo metu vykdomas kodas. Taigi, jei scenarijus1.rb buvo paleistas iš komandinės eilutės, jis laikysis scenarijus1.rb. Jei to reikalauja scenarijus scenarijus2.rb, 0 USD tame scenarijaus faile taip pat būtų scenarijus1.rb. Vardas $ 0 atspindi vardų sudarymo tvarką, naudojamą tuo pačiu tikslu UNIX apvalkalo scenarijuose.
  • $* - Komandinės eilutės argumentai masyve, žymimame * * (dolerio ženklas ir žvaigždutė). Pavyzdžiui, jei norėtum bėgti ./script.rb arg1 arg2, tada $ * būtų lygus % w {arg1 arg2}. Tai prilygsta ypatingajam ARGV masyvas ir turi mažiau apibūdinantį pavadinimą, todėl jis retai naudojamas.
  • $$ - vertėjo proceso ID, žymimas $$ (dviem dolerio ženklais). Žinoti savo proceso ID dažnai yra naudinga demonų programose (kurios veikia fone, neprijungtos prie bet kurio terminalo) arba sistemos paslaugose. Tačiau kai tai yra sriegis, tai tampa šiek tiek sudėtingesnė, todėl būkite atsargūs naudodamiesi aklai.
  • $ / ir $ \ - Tai yra įvesties ir išvesties įrašų skyrikliai. Kai jūs skaitote objektus naudodami gauna ir atsispausdinkite naudodami kelia, ji naudoja juos, kad žinotų, kada buvo perskaitytas visas „įrašas“, ar ką atspausdinti iš kelių įrašų. Pagal nutylėjimą tai turėtų būti naujos eilutės simbolis. Bet kadangi tai daro įtaką visų IO objektų elgesiui, jie yra naudojami retai, jei išvis. Galite juos pamatyti mažesniais scenarijais, kur kapsuliavimo taisyklių pažeidimas nėra problema.
  • $? - Paskutinio įvykdyto vaiko išėjimo būsena. Iš visų čia išvardytų kintamųjų tai tikriausiai yra pats naudingiausias. Priežastis yra paprasta: jūs negalite gauti vaikų procesų išėjimo būsenos pagal jų grąžinimo vertę iš sistema metodas, tik teisingas ar klaidingas. Jei turite žinoti tikrąją vaiko proceso grąžinimo vertę, turite naudoti šį specialųjį globalų kintamąjį. Vėlgi, šio kintamojo vardas yra paimtas iš UNIX apvalkalų.
  • $_ - paskutinė eilutė, kurią perskaitė gauna. Šis kintamasis gali būti painiavos taškas atvykstantiems į „Ruby“ iš Perlo. Perle, $ _ kintamasis reiškia kažką panašaus, bet visiškai skirtingą. Perle, $_ išlaiko paskutinio sakinio reikšmę, o rubine - eilutės, grąžintos ankstesnės, reikšmę gauna pašaukimas. Jų naudojimas yra panašus, tačiau tai, ką jie iš tikrųjų turi, labai skiriasi. Jūs taip pat dažnai nematote šio kintamojo (pagalvokite apie tai, retai matote bet kurį iš šių kintamųjų), tačiau galite juos pamatyti labai trumpose „Ruby“ programose, kurios apdoroja tekstą.

Trumpai tariant, retai matysite globalius kintamuosius. Jie dažnai būna blogos formos (ir „ne Ruby“) ir yra labai naudingi tik labai mažais scenarijais, kur galima visiškai įvertinti jų naudojimo padarinius. Galima naudoti keletą specialių globalių kintamųjų, tačiau dažniausiai jie nenaudojami. Jums tikrai nereikia žinoti tiek daug apie globalius kintamuosius, kad suprastumėte daugumą „Ruby“ programų, tačiau jūs turėtumėte bent jau žinoti, kad jie ten yra.