Можно ли получить доступ к переменным объекта?

Переменные объекта (те, что начинаются с @) недоступны извне объекта напрямую. Это содействует хорошей инкапсуляции. Однако 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

Можно также самому определить методы доступа, чтобы проверить аргументы или запустить обработку других связанных с переменной объекта атрибутов. Метод для чтения - это просто метод без параметров, а метод для присваивания нового значения переменной должен иметь имя, заканчивающееся на =, и принимать один параметр. Хотя в определении метода между именем метода и = не может быть пробелов, они допустимы в вызове метода, делая это похожим на любое другое присваивание. Можно также использовать методы += и -=, если соответствующие методы + и - определены.

Вход для пользователей