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óda attr_accessor
, ktorá následne modifikuje aktuálnu triedu - nezabudnite na implicitný prijímač: self.attr_accessor
, kde self
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 sa y
vždy berie ako správa, ktorú treba poslať (alebo "metóda, ktorú treba zavolať"). Metódy attr_*
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".