Wat is attr_accessor in Ruby?

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 de attr_accessor methode wordt aangeroepen die op zijn beurt de huidige klasse wijzigt - onthoud de impliciete ontvanger: self.attr_accessor, waarbij self het "open" klasse object is op dit punt.

De noodzaak voor attr_accessor en vrienden, is, wel:

  1. 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 wordt y altijd opgevat als een bericht om te verzenden (of "methode om aan te roepen"). Dus de attr_* methoden creëren wrappers die de instantie @variable toegang proxyen door dynamisch gecreëerde methoden.

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

Commentaren (2)

attr_accessor is heel eenvoudig:

attr_accessor :foo

is een afkorting voor:

def foo=(val)
  @foo = val
end

def foo
  @foo
end

het is niets meer dan een getter/setter voor een object

Commentaren (2)

In principe vervalsen ze publiek toegankelijke gegevensattributen, die Ruby niet heeft.

Commentaren (3)