Раздел «Язык Ruby».RubyCourseLecture06:
<<Метапрограммирование на Ruby

Следующая лекция
Предыдущая лекция

Лекция 6: Переопределение существующих методов. Singleton class

class Numeric
  def *(a)
    42
  end
end

puts 10000*232323

Singleton class

У каждого объекта, кроме объектов классов Fixnum, Float, Symbol, NilClass, TrueClass, FalseClass, есть их персональный класс, у которого есть единственный экземпляр — сам объект.

Наличие такого класса позволяет определять(переопределять) методы персонально только для одного объекта.

class Object
  def singleton_class
    (class <<self; self; end)
  end
end


a = "abc"
b = "abc"


a.singleton_class.class_eval do
  def +(x)
    42
  end
end

p a + "xyz"
p b + "xyz"

a.singleton_class.class_eval do
  make_cached :size
end

Следующая лекция
Предыдущая лекция

-- ArtemVoroztsov - 10 Mar 2010