Man ir grūti saprast attr_accessor
Ruby. Vai kāds var man to izskaidrot?
attr_accessor ir tikai metode. (Saitei vajadzētu sniegt vairāk informācijas par to, kā tas darbojas - apskatiet radīto metožu pārus, un pamācība jums parādīs, kā to izmantot.)
Viltība ir tā, ka class
Ruby valodā nav definīcija (tādās valodās kā C++ un Java tā ir "tikai definīcija"), bet gan izteiksme, kas tiek novērtēta. Šī novērtējuma laikā tiek izsaukta attr_accessor
metode, kas savukārt modificē pašreizējo klasi - atcerieties netiešo uztvērēju: self.attr_accessor
, kur self
ir "atvērtais" klases objekts šajā brīdī.
Nepieciešamība pēc attr_accessor
un draugiem ir, labi:
Ruby, tāpat kā Smalltalk, neļauj piekļūt instance mainīgajiem ārpus šī objekta metodēm1. Tas nozīmē, ka instanču mainīgajiem nevar piekļūt formā x.y
, kā tas ir ierasts, piemēram, Java vai pat Python. Ruby y
vienmēr tiek uzskatīts par ziņojumu, kas jānosūta (vai "metodi, kas jāizsauc"). Tādējādi attr_*
metodes rada apvalkus, kas aizstāj piekļuvi @mainīgajam
eksemplāram, izmantojot dinamiski radītas metodes.
Boilerplate sucks
Ceru, ka tas izskaidro dažas sīkākas detaļas. Priecīgu kodēšanu.
1 Tas nav gluži tā, un ir daži "paņēmieni", kā to apiet, bet nav sintakses atbalsta "publiskā gadījuma mainīgajam" piekļuvei.