Hva er attr_accessor i Ruby?
Jeg har vanskelig for å forstå attr_accessor
i Ruby. Kan noen forklare dette for meg?
986
3
Jeg har vanskelig for å forstå attr_accessor
i Ruby. Kan noen forklare dette for meg?
attr_accessor er bare en metode. (Lenken skal gi mer innsikt i hvordan den fungerer - se på metodeparene som genereres, og en veiledning skal vise deg hvordan du bruker den).
Trikset er at
class
er ikke en definisjon i Ruby (det er "bare en definisjon" i språk som C++ og Java), men det er et uttrykk som evaluerer. Det er under denne evalueringen nårattr_accessor
-metoden påkalles som igjen endrer den gjeldende klassen - husk den implisitte mottakeren:self.attr_accessor
, derself
er det "åpne" klasseobjektet på dette punktet.Behovet for
attr_accessor
og venner, er, ja:Ruby, som Smalltalk, tillater ikke forekomst variabler som skal nås utenfor metoder1 for det objektet. Det vil si at instansvariabler ikke kan nås i formen
x.y
som er vanlig i for eksempel Java eller til og med Python. I Rubyy
er alltid tatt som en melding å sende (eller "metode for å ringe "). Dermed oppretterattr_*
-metodene wrappere som gir tilgang til instansen@variable
gjennom dynamisk opprettede metoder.Boilerplate suger
Håper dette klargjør noen av de små detaljene. God koding.
Dette er ikke helt sant, og det er noen teknikker rundt dette, men det er ingen syntaksstøtte for tilgang til "public instance variable".
attr_accessor
er svært enkel:er en snarvei for:
det er ikke noe mer enn en getter/setter for et objekt
I utgangspunktet forfalsker de offentlig tilgjengelige dataattributter, noe Ruby ikke har.