Viac na
Čo je attr_accessor v jazyku Ruby?
Mám problém pochopiť attr_accessor
v Ruby. Môže mi to niekto vysvetliť?
986
3
Mám problém pochopiť attr_accessor
v Ruby. Môže mi to niekto vysvetliť?
attr_accessor je len metóda. (Odkaz by mal poskytnúť viac informácií o tom, ako to funguje - pozrite sa na dvojice vygenerovaných metód a návod by vám mal ukázať, ako to používať.)
Trik spočíva v tom, že
class
nie je v Ruby definícia (v jazykoch ako C++ a Java je to "len definícia"), ale je to výraz, ktorý sa vyhodnocuje. Práve počas tohto vyhodnocovania sa vyvolá metódaattr_accessor
, ktorá následne modifikuje aktuálnu triedu - nezabudnite na implicitný prijímač:self.attr_accessor
, kdeself
je v tomto okamihu "otvorený" objekt triedy.Potreba
attr_accessor
a jeho priateľov je, no:Ruby, podobne ako Smalltalk, neumožňuje prístup k inštančným premenným mimo metód1 pre daný objekt. To znamená, že k inštančným premenným nemožno pristupovať v tvare
x.y
, ako je to bežné povedzme v Jave alebo dokonca v Pythone. V Ruby say
vždy berie ako správa, ktorú treba poslať (alebo "metóda, ktorú treba zavolať"). Metódyattr_*
teda vytvárajú obaly, ktoré sprostredkúvajú prístup k inštancii@premennej
prostredníctvom dynamicky vytvorených metód.Boilerplate sucks
Dúfam, že to objasňuje niektoré drobné detaily. Šťastné kódovanie.
1 Nie je to striktne pravda a existujú niektoré "techniky", ktoré to obchádzajú, ale neexistuje žiadna syntaktická podpora pre "prístup k verejnej inštančnej premennej".
attr_accessor
je veľmi jednoduchý:je skratka pre:
nie je to nič iné ako getter/setter pre objekt
V podstate falšujú verejne prístupné atribúty dát, ktoré Ruby nemá.