Wat is attr_accessor in Ruby?
Ik heb moeite om attr_accessor
in Ruby te begrijpen. Kan iemand mij dit uitleggen?
986
3
Ik heb moeite om attr_accessor
in Ruby te begrijpen. Kan iemand mij dit uitleggen?
attr_accessor is gewoon een methode. (De link zou meer inzicht moeten geven in hoe het werkt - kijk naar de paren van gegenereerde methodes, en een tutorial zou je moeten laten zien hoe het te gebruiken).
De truc is dat
class
geen definitie is in Ruby (het is "just a definition" in talen als C++ en Java), maar het is een expressie die evalueert. Het is tijdens deze evaluatie dat deattr_accessor
methode wordt aangeroepen die op zijn beurt de huidige klasse wijzigt - onthoud de impliciete ontvanger:self.attr_accessor
, waarbijself
het "open" klasse object is op dit punt.De noodzaak voor
attr_accessor
en vrienden, is, wel:Ruby, net als Smalltalk, staat niet toe dat instantie variabelen worden benaderd buiten de methoden1 voor dat object. Dat wil zeggen, instantie variabelen kunnen niet worden benaderd in de
x.y
vorm zoals gebruikelijk is in bijvoorbeeld Java of zelfs Python. In Ruby wordty
altijd opgevat als een bericht om te verzenden (of "methode om aan te roepen"). Dus deattr_*
methoden creëren wrappers die de instantie@variable
toegang proxyen door dynamisch gecreëerde methoden.Boilerplate zuigt
Hopelijk verduidelijkt dit een aantal van de kleine details. Veel plezier met coderen.
1 Dit is'niet strikt waar en er zijn enkele "techniques" around this, maar er is geen syntax ondersteuning voor "public instance variable" access.
attr_accessor
is heel eenvoudig:is een afkorting voor:
het is niets meer dan een getter/setter voor een object
In principe vervalsen ze publiek toegankelijke gegevensattributen, die Ruby niet heeft.