Можно ли получить доступ к переменным объекта?
Переменные объекта (те, что начинаются с @) недоступны извне объекта напрямую. Это содействует хорошей инкапсуляции. Однако Ruby позволяет определить методы доступа к этим методам таким образом, что пользователи класса могут обращаться с переменными объекта как с атрибутами. Достаточно использовать один из методов Module.attr, attr_reader, attr_writer или attr_accessor.
class Person
attr :name # read only
attr_accessor :wearing_a_hat # read/write
def initialize(name)
@name = name
@wearing_a_hat = false
end
end
p = Person.new("Dave")
puts p.name #=> Dave
puts p.wearing_a_hat #=> false
p.wearing_a_hat = true
puts p.wearing_a_hat #=> true
Можно также самому определить методы доступа, чтобы проверить аргументы или запустить обработку других связанных с переменной объекта атрибутов. Метод для чтения - это просто метод без параметров, а метод для присваивания нового значения переменной должен иметь имя, заканчивающееся на =, и принимать один параметр. Хотя в определении метода между именем метода и = не может быть пробелов, они допустимы в вызове метода, делая это похожим на любое другое присваивание. Можно также использовать методы += и -=, если соответствующие методы + и - определены.
