Promjene instanci u Rubyju

click fraud protection

Promjenjive instancije počinju znakom (@) i mogu se referencirati samo unutar metoda klase. Oni se od lokalnih varijabli razlikuju po tome što ne postoje ni u jednoj posebnoj djelokrug. Umjesto toga, slična tablica varijable pohranjuje se za svaku instancu klase. Promjenjive instancije žive u instanci klase, sve dok ta instanca ostane živa, tako će postojati i varijable instancije.

Promjene instanci mogu se pozivati ​​u bilo kojoj metodi te klase. Sve metode klase koriste istu instancu varijabilna tablica, za razliku od lokalnih varijabli gdje će svaka metoda imati različitu tablicu varijabli. Moguće je pristupiti varijablama instance bez prethodnog definiranja. To neće stvoriti iznimku, ali vrijednost varijable bit će nula a upozorit će se ako pokrenete Ruby s uređajem -w sklopka.

Ovaj primjer pokazuje upotrebu varijabli primjerka. Imajte na umu da je stvar sadrži -w preklopnik, koji će ispisati upozorenja u slučaju da se pojave. Također, obratite pažnju na pogrešnu upotrebu izvan metode u opsegu klase. To je netočno i raspravlja se u nastavku.

instagram viewer

Zašto @test varijabla netočna? Ovo ima veze s opsegom i načinom na koji Ruby provodi stvari. Unutar metode, opseg varijable instance odnosi se na posebnu instancu te klase. Međutim, u području klase (unutar klase, ali izvan bilo koje metode), opseg je instanca klase opseg. Ruby provodi hijerarhiju klase instanciranjem klasa objekata, pa postoji a druga instanca igramo ovdje. Prvi primjer je instanca klasa klase, a ovdje je @test će ići. Druga instanca je instancija TestClass, i ovo je mjesto @vrijednost će ići. Ovo postaje malo zbunjujuće, ali samo zapamtite da nikad ne koristite @instance_variables izvan metoda. Ako vam je potrebno skladište za cijelu klasu, poslužite se @@ class_variables, koja se može koristiti bilo gdje u opsegu klase (unutar ili izvan metoda) i ponašat će se isto.

Normalnim varijablama obično ne možete pristupiti izvan objekta. Na primjer, u gornjem primjeru ne možete jednostavno nazvati t.value ili t. @ vrijednost za pristup varijabli instance @vrijednost. Time bi se prekršila pravila ovijanje. To se također odnosi na instance dječjih klasa, oni ne mogu pristupiti varijablama instance koji pripadaju nadređenoj klasi iako su tehnički isti tip. Kako biste omogućili pristup varijablama instance, pristupnik metode se moraju deklarirati.

Sljedeći primjer pokazuje kako se mogu pisati metode pristupa. Međutim, imajte to na umu Rubin pruža prečac i da ovaj primjer postoji samo da vam pokaže kako funkcionišu metode pristupa. Obično nije uobičajeno vidjeti metode pristupa napisane na ovaj način, osim ako za pristupnik nije potrebna nekakva dodatna logika.

Prečaci čine stvari malo lakšima i kompaktnijima. Postoje tri ove pomoćne metode. One se moraju izvoditi u opsegu klase (unutar klase, ali izvan bilo koje metode) i dinamički će definirati metode slično kao metode definirane u gornjem primjeru. Ovdje se ne događa nikakva magija i izgledaju kao ključne riječi jezika, ali stvarno samo dinamički definiraju metode. Isto tako, ti se uređaji najčešće nalaze u vrhu klase. To čitatelju daje trenutačni pregled koji će varijable članice biti dostupne izvan klase ili poduke.

Postoje tri ove metode pristupa. Svako od njih ima popis simbola koji opisuju varijable instance kojima se može pristupiti.

  • attr_reader - Definirati metode "čitača", kao što su Ime metoda u gornjem primjeru.
  • attr_writer - definirati metode "pisca" kao što su age = metoda u gornjem primjeru.
  • attr_accessor - Definirati metode "čitač" i "pisac".

Kada se koriste instancije varijable

Sad kad znate što su varijable instanci, kada ih koristite? Promjene instanci trebaju se koristiti kada predstavljaju stanje objekta. Ime i starost učenika, njegove ocjene itd. Ne smiju se koristiti za privremeno skladištenje, za to su lokalne varijable. Međutim, mogu se koristiti za privremeno skladištenje između poziva metoda za izradu u više faza. No ako to radite, možda biste trebali preispitati sastav svoje metode i umjesto toga te varijable pretvoriti u parametre metode.

instagram story viewer