2016-03-19 11 views
-2

Vorwort: Ich verstehe die Standarddefinition für attr_accessor und weiß, dass attr_accessor für zwei Instanzmethoden steht - einen Setter und einen Schreiber, und attr_accessor ermöglicht den Zugriff auf Instanzvariablen innerhalb der Klasse.Wenn attr_accessor ein Element enthält, z. ': name', braucht man die 'name =' Methode?

Aber hin und wieder sehe ich ein Element in attr_accessor UND als Methode definiert ist.

Also meine Frage ist: Warum passiert das? Ist es nur schlechter Code, den ich gesehen habe?

Pseudo/Beispielcode:

class Such_n_such 
    attr_accessor :name, :color 
      #code omitted 
     def color=(color) 
     (some code) 
     end 

Vielen Dank im Voraus!

+1

die gleiche Setter und Schriftsteller nicht? – sawa

+0

Ich glaube nicht - Setter legt den Wert, Zeitraum, wie in "def name @name = name", und Schreiber erlaubt Werte zurückgesetzt werden, wie in "def name = (name) – YCode

Antwort

3

Ich würde argumentieren, dass Sie attr_accessor nicht verwenden sollten und dann den Setter übersteuern.

ich lieber mit attr_reader mit benutzerdefinierten Setter-Methoden:

attr_accessor :name 
attr_reader :color 

def color=(color) 
    # ... 
end 
0

Ja, attr_accessor fügt die Setter- und Getter-Methode für dieses Attribut hinzu und nein, es ist keine schlechte Übung, wenn Sie einen benutzerdefinierten Setter benötigen. Nehmen wir an, Sie möchten einen Setter für Farbe wie Ihr Beispiel. Sie möchten die Tatsache einbeziehen, dass Farbe eine Zahl, eine Schnur, usw. sein könnte ...

+0

nicht die beiden Konflikte dann? Das heißt: Wird attr_accessor vom benutzerdefinierten Setter überschrieben? – YCode

+1

Nein, es wird nicht überschrieben.Es wird überschrieben.Es gibt keine Vererbung hier, also kein Überschreiben. –