Čo je attr_accessor v jazyku Ruby?

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:

  1. 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.

  2. 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".

Komentáre (2)

attr_accessor je veľmi jednoduchý:

attr_accessor :foo

je skratka pre:

def foo=(val)
  @foo = val
end

def foo
  @foo
end

nie je to nič iné ako getter/setter pre objekt

Komentáre (2)

V podstate falšujú verejne prístupné atribúty dát, ktoré Ruby nemá.

Komentáre (3)