Rubino kintamieji egzempliorių kintamieji
H&S Produktion / Getty Images
Egzempliorių kintamieji prasideda ženklu at (@) ir gali būti nurodomi tik klasės metoduose. Jie skiriasi nuo vietinių kintamųjų tuo, kad jų nėra jokiame konkrečiame apimtis . Vietoj to kiekvienam klasės egzemplioriui saugoma panaši kintamųjų lentelė. Egzempliorių kintamieji gyvena klasės egzemplioriuje, taigi tol, kol tas egzempliorius išliks gyvas, egzempliorių kintamieji bus gyvi.
Į egzempliorių kintamuosius galima kreiptis bet kuriuo tos klasės metodu. Visi klasės metodai naudoja tą patį egzempliorių kintamoji lentelė , priešingai nei vietiniai kintamieji, kur kiekvienas metodas turės skirtingą kintamųjų lentelę. Tačiau galima pasiekti egzempliorių kintamuosius prieš tai jų neapibrėžus. Tai nesukels išimties, bet kintamojo reikšmė bus nulis ir bus pateiktas įspėjimas, jei paleidote Ruby su -į jungiklis.
Šis pavyzdys parodo egzempliorių kintamųjų naudojimą. Atkreipkite dėmesį, kad Shebang yra -į jungiklį, kuris išspausdins įspėjimus, jei jie įvyktų. Taip pat atkreipkite dėmesį į neteisingą naudojimą už metodo ribų klasės srityje. Tai neteisinga ir aptariama toliau.
Kodėl yra @testas kintamasis neteisingas? Tai susiję su apimtimi ir tuo, kaip Ruby įgyvendina dalykus. Metodo atveju egzemplioriaus kintamojo apimtis nurodo konkretų tos klasės egzempliorių. Tačiau klasės srityje (klasės viduje, bet už bet kokių metodų ribų) apimtis yra klasės pavyzdys apimtis. Ruby įgyvendina klasių hierarchiją instantiavimu Klasė objektų, todėl yra a antra instancija čia žaidžia. Pirmas instancija yra pavyzdys Klasė klasėje, ir štai kur @testas eisiu. Antrasis atvejis yra egzempliorius TestClass , ir štai kur @vertė eisiu. Tai tampa šiek tiek painu, bet nepamirškite niekada nenaudoti @instance_variables už metodų ribų. Jei jums reikia visos klasės saugyklos, naudokite @@class_variables , kuris gali būti naudojamas bet kurioje klasės apimties vietoje (metodų viduje arba išorėje) ir elgsis taip pat.
Priedai
Paprastai negalite pasiekti egzempliorių kintamųjų iš objekto išorės. Pavyzdžiui, aukščiau pateiktame pavyzdyje negalite tiesiog paskambinti t.vertė arba t.@vertė norėdami pasiekti egzemplioriaus kintamąjį @vertė . Tai pažeistų taisykles inkapsuliavimas . Tai taip pat taikoma antrinių klasių egzemplioriams, jie negali pasiekti egzempliorių kintamųjų, priklausančių pirminei klasei, net jei jie techniškai yra to paties tipo. Taigi, norėdami suteikti prieigą prie egzempliorių kintamųjų, priedas metodai turi būti deklaruoti.
Toliau pateiktame pavyzdyje parodyta, kaip galima parašyti priedų metodus. Tačiau atkreipkite dėmesį, kad Rubinas pateikia nuorodą ir kad šis pavyzdys egzistuoja tik tam, kad parodytų, kaip veikia prieigos priedų metodai. Paprastai nėra įprasta matyti tokiu būdu parašytų priedų metodų, nebent reikia papildomos logikos.
Spartieji klavišai daro viską šiek tiek lengviau ir kompaktiškesnį. Yra trys iš šių pagalbinių metodų. Jie turi būti vykdomi klasės srityje (klasėje, bet už bet kokių metodų ribų) ir dinamiškai apibrėžs metodus, panašius į aukščiau esančiame pavyzdyje aprašytus metodus. Čia nevyksta jokia magija, jie atrodo kaip kalbos raktiniai žodžiai, bet iš tikrųjų tai tik dinamiškai apibrėžiantys metodai. Be to, šie priedai paprastai yra klasės viršuje. Tai suteikia skaitytojui greitą apžvalgą, kurie narių kintamieji bus prieinami ne klasėje arba vaikų klasėse.
Yra trys iš šių priedų metodų. Kiekvienas iš jų turi simbolių sąrašą, apibūdinantį egzempliorių kintamuosius, kuriuos reikia pasiekti.
Kada naudoti egzempliorių kintamuosius
Dabar, kai žinote, kas yra egzempliorių kintamieji, kada juos naudojate? Egzempliorių kintamieji turėtų būti naudojami, kai jie atspindi objekto būseną. Mokinio vardas ir pavardė, amžius, pažymiai ir pan. Jie neturėtų būti naudojami laikinai saugoti, tam yra skirti vietiniai kintamieji. Tačiau jie gali būti naudojami laikinam saugojimui tarp kelių pakopų skaičiavimų metodų iškvietimų. Tačiau jei tai darote, galbūt norėsite permąstyti savo metodo sudėtį ir vietoj to šiuos kintamuosius paversti metodo parametrais.