Puede usar los diferentes accesores para comunicar su intención a alguien que lea su código y facilitar la escritura de clases que funcionarán correctamente sin importar cómo se llame su API pública.
class Person
attr_accessor :age
...
end
Aquí, puedo ver que puedo leer y escribir la edad.
class Person
attr_reader :age
...
end
Aquí, puedo ver que solo puedo leer la edad. Imagine que lo establece el constructor de esta clase y luego se mantiene constante. Si hubo un mutador (escritor) para la edad y la clase se escribió asumiendo que esa edad, una vez establecida, no cambia, entonces podría producirse un error al llamar al mutador al código.
Pero, ¿qué está pasando detrás de escena?
Si tú escribes:
attr_writer :age
Eso se traduce en:
def age=(value)
@age = value
end
Si tú escribes:
attr_reader :age
Eso se traduce en:
def age
@age
end
Si tú escribes:
attr_accessor :age
Eso se traduce en:
def age=(value)
@age = value
end
def age
@age
end
Sabiendo eso, aquí hay otra forma de pensarlo: si no tuviera los ayudantes attr _... y tuviera que escribir los accesos usted mismo, ¿escribiría más accesos de los que su clase necesitaba? Por ejemplo, si la edad solo necesita ser leída, ¿también escribirías un método que permita que se escriba?