<<Метапрограммирование на 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