Книга: Программирование на языке Ruby

11.2.10. Автоматическое определение методов чтения и установки на уровне класса

11.2.10. Автоматическое определение методов чтения и установки на уровне класса

Мы уже рассматривали методы attr_reader, attr_writer и attr_accessor, которые немного упрощают определение методов чтения и установки атрибутов экземпляра. А как быть с атрибутами уровня класса?

В Ruby нет аналогичных средств для их автоматического создания. Но можно написать нечто подобное самостоятельно.

В первом издании этой книги была показана хитроумная схема на основе метода class_eval. С ее помощью мы создали такие методы, как cattr_reader и cattr_writer.

Но есть более простой путь. Откроем синглетный класс и воспользуемся в нем семейством методов attr. Получающиеся переменные экземпляра для синглетного класса станут переменными экземпляра класса. Часто это оказывается лучше, чем переменные класса, поскольку они принадлежат данному и только данному классу, не распространяясь вверх и вниз по иерархии наследования.

class MyClass
 @alpha = 123          # Инициализировать @alpha.
 class << self
  attr_reader :alpha   # MyClass.alpha()
  attr_writer :beta    # MyClass.beta=()
  attr_accessor :gamma # MyClass.gamma() и
 end                   # MyClass.gamma=()
 def MyClass.look
  puts " #@alpha, #@beta, #@gamma"
 end
 #...
end
puts MyClass.alpha # 123
MyClass.beta = 456
MyClass.gamma = 789
puts MyClass.gamma # 789
MyClass.look       # 123, 456, 789

Как правило, класс без переменных экземпляра бесполезен. Но здесь мы их для краткости опустили.

Оглавление книги


Генерация: 1.278. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз