„Ruby“ egzempliorių kintamieji

Egzempliorių kintamieji prasideda ženklu at (@) ir gali būti remiami tik klasės metodais. Jie skiriasi nuo vietinių kintamųjų tuo, kad neegzistuoja nė viename konkrečiame taikymo sritis. Vietoj to, kiekvienam klasės egzemplioriui saugoma panaši kintamų lentelė. Egzempliorių kintamieji gyvena klasės egzemplioriuje, tol, kol egzistuoja egzempliorius, egzistuos egzempliorių kintamieji.

Į egzempliorių kintamuosius galima remtis bet kuriame tos klasės metode. Visi klasės metodai naudoja tą patį egzempliorių kintama lentelė, o ne vietiniams kintamiesiems, kai kiekvienas metodas turės skirtingą kintamųjų lentelę. Vis dėlto galima pasiekti egzempliorių kintamuosius, iš pradžių jų neapibrėžus. Tai nekels išimties, tačiau kintamojo vertė bus nulis ir jei bus paleista „Ruby“ su -w jungiklis.

Šis pavyzdys parodo egzempliorių kintamųjų naudojimą. Atminkite, kad shebang yra -w jungiklis, kuris atspausdins įspėjimus, jei jie įvyktų. Taip pat atkreipkite dėmesį į neteisingą metodo ne klasės naudojimą. Tai neteisinga ir aptariama toliau.

instagram viewer

Kodėl yra @testas kintamasis neteisingas? Tai turi būti susiję su apimtimi ir tuo, kaip „Ruby“ įgyvendina dalykus. Taikant metodą, egzemplioriaus kintamoji apimtis nurodo konkretų tos klasės egzempliorių. Tačiau klasės apimtyje (klasės viduje, bet netaikant jokių metodų) ši sritis yra: klasės instancija taikymo sritis. „Ruby“ įgyvendina klasių hierarchiją trumpai įprasmindamas Klasė objektus, taigi yra a antra instancija čia žaisti. Pirmas instancija yra Klasė klasė, ir štai kur @testas eisiu. Antroji instancija yra „TestClass“, ir štai kur @value eisiu. Tai šiek tiek painioja, tačiau atminkite, kad niekada nenaudokite @instance_variables už metodų ribų. Jei jums reikia visos klasės saugyklos, naudokite @@ class_variables, kuris gali būti naudojamas bet kurioje klasės vietoje (metodų viduje ar išorėje) ir elgsis taip pat.

Paprastai negalite pasiekti egzempliorių kintamųjų iš objekto išorės. Pavyzdžiui, aukščiau pateiktame pavyzdyje jūs negalite tiesiog paskambinti t.verte arba t. @ vertės norint pasiekti egzemplioriaus kintamąjį @value. Tai pažeistų inkapsuliacija. Tai taip pat taikoma vaikų klasių egzemplioriams, jie negali pasiekti tėvų klasei priklausančių egzempliorių kintamųjų, net jei jie techniškai yra to paties tipo. Taigi, norėdami suteikti prieigą prie egzempliorių kintamųjų, prieiga metodai turi būti deklaruoti.

Šis pavyzdys parodo, kaip galima rašyti prieigos metodus. Tačiau atkreipkite dėmesį į tai Rubinas pateikia nuorodą ir šis pavyzdys egzistuoja tik tam, kad parodytų, kaip veikia priedų metodai. Paprastai nėra įprasta matyti tokiu būdu parašytus priedų metodus, nebent jiems reikia kažkokios papildomos logikos.

Spartieji klavišai padaro viską šiek tiek lengvesnius ir kompaktiškesnius. Yra trys iš šių pagalbininkų metodų. Jie turi būti vykdomi klasės apimtyje (klasės viduje, bet netaikant jokių metodų) ir dinamiškai apibūdins metodus, panašiai kaip metodai, apibrėžti aukščiau pateiktame pavyzdyje. Čia nevyksta jokios magijos ir jie atrodo kaip kalbos raktiniai žodžiai, tačiau jie iš tikrųjų yra tik dinamiškai apibūdinantys metodai. Be to, šie priedai dažniausiai būna klasės viršuje. Tai skaitytojui suteikia greitą apžvalgą, kokie kintamieji nariai bus prieinami už klasės ribų ar vaikų klasėse.

Yra trys iš šių prieigos būdų. Kiekvienas iš jų sudaro simbolių, apibūdinančių egzempliorių kintamuosius, kuriuos reikia naudoti, sąrašą.

  • „attr_reader“ - Apibrėžkite "skaitytojo" metodus, tokius kaip vardas metodas aukščiau pateiktame pavyzdyje.
  • attr_writer - Apibrėžkite "rašytojo" metodus, tokius kaip amžius = metodas aukščiau pateiktame pavyzdyje.
  • attr_accessor - Apibrėžkite „skaitytojo“ ir „rašytojo“ metodus.

Kada naudoti egzempliorių kintamuosius

Dabar, kai žinote, kokie yra egzempliorių kintamieji, kada juos naudojate? Egzempliorių kintamieji turėtų būti naudojami, kai jie nurodo objekto būseną. Studento vardas, pavardė, amžius, pažymiai ir kt. Jie neturėtų būti naudojami laikinam saugojimui, tam yra skirti vietiniai kintamieji. Tačiau jie gali būti naudojami laikinam saugojimui tarp metodų kvietimų atlikti daugiapakopius skaičiavimus. Tačiau jei tai darote, galbūt norėsite pergalvoti savo metodo sudėtį ir šiuos kintamuosius paversti metodo parametrais.