Hvad er attr_accessor i Ruby?
Jeg har svært ved at forstå attr_accessor
i Ruby. Er der nogen, der kan forklare mig dette?
986
3
Jeg har svært ved at forstå attr_accessor
i Ruby. Er der nogen, der kan forklare mig dette?
attr_accessor er nogle gange en metode. (Linket bør give mere indsigt i, hvordan det fungerer - se på de par af metoder, der genereres, og en vejledning bør vise dig, hvordan du bruger det.)
Tricket er, at
class
er ikke en definition i Ruby (det er "bare en definition" i sprog som C++ og Java), men det er et udtryk der evaluerer. Det er under denne evaluering, atattr_accessor
-metoden bliver påkaldt, som igen ændrer den aktuelle klasse - husk den implicitte modtager:self.attr_accessor
, hvorself
er "open" klasseobjektet på dette tidspunkt.Behovet for
attr_accessor
og venner, er, tja:Ruby, ligesom Smalltalk, tillader ikke, at der er adgang til instansvariabler uden for metoder1 for det pågældende objekt. Det vil sige, at man ikke kan få adgang til instansvariabler i form af
x.y
, som det er almindeligt i f.eks. Java eller endda Python. I Ruby opfattesy
altid som en besked der skal sendes (eller "metode der skal kaldes"). Derfor skaberattr_*
-metoderne wrappers, som giver adgang til instansen@variable
gennem dynamisk oprettede metoder.Boilerplate stinker
Håber dette tydeliggør nogle af de små detaljer. God kodning.
1 Dette er ikke helt sandt, og der findes [nogle "teknikker" omkring dette] (https://stackoverflow.com/questions/1074729/get-the-value-of-an-instance-variable-given-its-name), men der er ingen syntaksunderstøttelse for "offentlig instansvariabel" adgang.
attr_accessor
er meget enkel:er en genvej for:
det er ikke andet end en getter/setter for et objekt
I bund og grund forfalsker de offentligt tilgængelige dataattributter, hvilket Ruby ikke har.