Рассмотрим этот очень простой класс ведения журнала:
class MockLog
# ...
end
Давайте добавим запись во все наши классы:
class Module
def has_logging()
class_eval {
@log = MockLog.new
def log
self.class.instance_variable_get :@log
end
}
end
end
Теперь, почему это не работает?
class Foo
has_logging
end
Foo.new.log.nil? # => false, as expected
class Bar < Foo
end
Bar.new.log.nil? # => true?! Why wasn't the `log` method inherited?