Я где-то пропустил записку, и надеюсь, вы объясните мне это.
Почему 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?