Я где-то пропустил записку, и надеюсь, вы объясните мне это.
Почему eigenclass объекта отличается от self.class?
class Foo
def initialize(symbol)
eigenclass = class << self
self
end
eigenclass.class_eval do
attr_accessor symbol
end
end
end
Моя логическая схема, которая приравнивает eigenclass к class.self, довольно проста:
class << self - это способ объявления методов класса, а не методов экземпляра. Это ярлык для def Foo.bar.
Итак, в ссылке на объект класса возвращение self должно быть идентично self.class. Это связано с тем, что class << self установил self в Foo.class для определения методов/атрибутов класса.
Я просто смущен? Или это хитроумный трюк мета-программирования Ruby?