2011-10-03 19 views
6

¿Cómo funciona esto? Cuando se ejecuta lo siguiente "hi from class" se imprime dos veces. ¿Qué está pasando dentro de ruby ​​para hacer que esto se comporte así? ¿No soy yo, de hecho, haciendo un método de instancia para la claseclase clase: métodos instancia vs. clase

class Class 
    def foo 
    puts "hi from class" 
    end 
end 

Class.foo 
x = Class.new 
x.foo 

Respuesta

9

No sé si eres consciente de ello, pero cuando lo hace class Class ... end, no se va a crear una nueva clase llamada Class, que' volver a abrir la clase existente Class.

Dado que Class es la clase que todas las clases son instancias de eso significa que Class es una instancia de sí mismo. Y por eso puede llamar a cualquier método de instancia de Class directamente en Class de la misma manera que puede hacerlo en cualquier otra clase.

+0

Entonces, ¿qué ocurre cuando (en el cuerpo de 'class Class') I' def self.foo; pone "hola de ** uno mismo **"; fin; '... ahora la declaración' Class.foo' imprime 'hi from self'? – slindsey3000

+0

@ slindsey3000: si define tanto un método de instancia como un método de clase en 'Clase',' Class.foo' llamará al método de clase y 'AnyOtherClass.foo' llamará al método de instancia. Por lo tanto, en su ejemplo 'Class.foo' imprimirá 'hi from ** self **' y p. 'String.foo' imprimirá' hola de la clase'. – sepp2k

Cuestiones relacionadas