Sie können die verschiedenen Zugriffsmethoden verwenden, um jemandem, der Ihren Code liest, Ihre Absicht mitzuteilen und das Schreiben von Klassen zu vereinfachen, die unabhängig vom Aufruf ihrer öffentlichen API ordnungsgemäß funktionieren.
class Person
attr_accessor :age
...
end
Hier kann ich sehen, dass ich das Alter sowohl lesen als auch schreiben kann.
class Person
attr_reader :age
...
end
Hier kann ich sehen, dass ich nur das Alter lesen darf. Stellen Sie sich vor, dass es vom Konstruktor dieser Klasse festgelegt wird und danach konstant bleibt. Wenn es einen Mutator (Writer) für das Alter gibt und die Klasse unter der Annahme geschrieben wird, dass sich das einmal festgelegte Alter nicht ändert, kann ein Fehler durch den Code entstehen, der diesen Mutator aufruft.
Aber was passiert hinter den Kulissen?
Wenn Sie schreiben:
attr_writer :age
Das wird übersetzt in:
def age=(value)
@age = value
end
Wenn Sie schreiben:
attr_reader :age
Das wird übersetzt in:
def age
@age
end
Wenn Sie schreiben:
attr_accessor :age
Das wird übersetzt in:
def age=(value)
@age = value
end
def age
@age
end
Wenn Sie das wissen, können Sie darüber nachdenken: Wenn Sie nicht die attr _...-Helfer hätten und die Accessoren selbst schreiben müssten, würden Sie dann mehr Accessoren schreiben, als Ihre Klasse benötigt? Wenn beispielsweise das Alter nur gelesen werden müsste, würden Sie dann auch eine Methode schreiben, mit der es geschrieben werden kann?