Me he perdido la nota en alguna parte, y espero que me lo expliques.¿Por qué la clase de usuario no es equivalente a self.class, cuando parece tan similar?
¿Por qué el eigenclass de un objeto diferente de self.class
?
class Foo
def initialize(symbol)
eigenclass = class << self
self
end
eigenclass.class_eval do
attr_accessor symbol
end
end
end
Mi tren de la lógica que equipara los eigenclass con class.self
es bastante simple:
class << self
es una forma de declarar métodos de clase, en lugar de los métodos de instancia. Es un atajo al def Foo.bar
.
Por lo tanto, dentro de la referencia al objeto de clase, devolver self
debe ser idéntico a self.class
. Esto se debe a que class << self
establecería self
en Foo.class
para la definición de los métodos/atributos de clase.
¿Estoy confundido? O, ¿es este un truco furtivo de la meta-programación de Ruby?
Así pues, cada instancia es una subclase de la clase anónima creada? –
clase de * * Cada instancia es una subclase anónima de la clase creada. La clase de f1 es una subclase anónima de Foo, la clase de Foo es una subclase anónima de Clase. –
nice answer :) mucha gente no entiende esto tan claramente como tú. – horseyguy