История изменений
Исправление special-k, (текущая версия) :
хочу обратить внимание
сеттеры переменных инстанса
Это, как бы, не так.. в руби нет понятия сеттера в принципе - есть имитация (частный случай вызова метода). Но смотрите, выглядит так, словно a - это локальная переменная, для которой переопределен оператор = (единственное отличие - необходимость использования self при присвоении). Методы a и a= даже нельзя вызвать снаружи объекта. И это не какие-то космические костыли, это элементарнейшая конструкция языка, это гибкость.
class A
def inc_a!
self.a += 1
a
end
protected
def a= v
@a = v * 2
end
def a
@a ||= 0
end
end
t = A.new
p t.inc_a! #2
p t.inc_a! #6
t.a #NoMethodError
t.a = 1 #NoMethodError
Исходная версия special-k, :
хочу обратить внимание
сеттеры переменных инстанса
Это, как бы, не так.. в руби нет понятия сеттера в принципе - есть имитация (частный случай вызова метода). Но смотрите, выглядит так, словно a - это локальная переменная, для которой переопределен оператор = (единственное отличие - необходимость использования self при присвоении). Методы a и a= даже нельзя вызвать снаружи объекта. И это не какие-то космические костыли, это элементарнейшая конструкция языка, это гибкость.
class A def inc_a! self.a += 1 a end
protected def a= v @a = v * 2 end def a @a ||= 0 end end
t = A.new p t.inc_a! #2 p t.inc_a! #6 t.a #NoMethodError t.a = 1 #NoMethodError