Perché l’eigenclass non è equivalente a self.class, quando sembra così simile?

Ho perso il promemoria da qualche parte, e spero che me lo spieghi.

Perché l’eigenclass di un object è diverso da self.class ?

 class Foo def initialize(symbol) eigenclass = class << self self end eigenclass.class_eval do attr_accessor symbol end end end 

Il mio treno di logica che equipara l’eigenclass con class.self è piuttosto semplice:

class << self è un modo per dichiarare i metodi di class, piuttosto che i metodi di istanza. È una scorciatoia per def Foo.bar .

Quindi all’interno del riferimento all’object class, il ritorno di self dovrebbe essere identico a self.class . Questo perché la class << self dovrebbe impostare self su Foo.class per la definizione di metodi / attributi di class.

Sono solo confuso? Oppure, questo è un trucco subdolo della meta-programmazione di Ruby?