Hva er attr_accessor i Ruby?

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år attr_accessor-metoden påkalles som igjen endrer den gjeldende klassen - husk den implisitte mottakeren: self.attr_accessor, der self er det "åpne" klasseobjektet på dette punktet.

Behovet for attr_accessor og venner, er, ja:

  1. 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 Ruby y er alltid tatt som en melding å sende (eller "metode for å ringe "). Dermed oppretter attr_*-metodene wrappere som gir tilgang til instansen @variable gjennom dynamisk opprettede metoder.

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

Kommentarer (2)

attr_accessor er svært enkel:

attr_accessor :foo

er en snarvei for:

def foo=(val)
  @foo = val
end

def foo
  @foo
end

det er ikke noe mer enn en getter/setter for et objekt

Kommentarer (2)

I utgangspunktet forfalsker de offentlig tilgjengelige dataattributter, noe Ruby ikke har.

Kommentarer (3)