Ви можете використовувати різні аксесуари для передачі свого наміру тому, хто читає ваш код, і полегшити запис класів, які працюватимуть правильно, незалежно від того, як називається їх публічний API.
class Person
attr_accessor :age
...
end
Тут я бачу, що я можу і читати, і писати вік.
class Person
attr_reader :age
...
end
Тут я бачу, що я можу читати лише вік. Уявіть, що він задається конструктором цього класу і після цього залишається постійним. Якщо для віку існував мутатор (письменник), а клас писали, припускаючи, що вік, коли він встановлений, не змінюється, помилка може виникнути в результаті коду, який викликає цього мутатора.
Але що відбувається за лаштунками?
Якщо ви пишете:
attr_writer :age
Це перекладається на:
def age=(value)
@age = value
end
Якщо ви пишете:
attr_reader :age
Це перекладається на:
def age
@age
end
Якщо ви пишете:
attr_accessor :age
Це перекладається на:
def age=(value)
@age = value
end
def age
@age
end
Знаючи це, ось ще один спосіб подумати про це: Якби у вас не було помічників attr _..., і вам довелося писати аксесуари самостійно, ви написали б більше аксесуарів, ніж потрібно вашому класу? Наприклад, якщо вік потрібно було лише прочитати, ви також написали метод, який дозволяє його писати?