2011-05-18 13 views
37

En Ruby, ¿cuál es la diferencia entre poner el código en un método initialize() en lugar de directamente en el cuerpo de la clase? Ambos parecen ejecutarse al llamar al MyClass.new.Ruby: initialize() vs class body?

Claramente, initialize() puede aceptar parámetros, pero ¿es esa la única diferencia?

class MyClass 
    puts 'Hello' 

    def initialize(params) 
    puts 'World' 
    end 
end 

Respuesta

60

intenta crear dos instancias de MyClass

a = MyClass.new 
b = MyClass.new 

para ver la diferencia:

Hola

Mundial

Mundial

El código en el cuerpo de la clase se ejecuta solo una vez, cuando ruby ​​carga el archivo. initialize() se ejecuta cada vez que creas una nueva instancia de tu clase.

+3

Además, en _initialize_ tiene la instancia del objeto para trabajar. – tokland

3

si escribe un código en el cuerpo de la clase se ejecutará cuando Ruby cargue esa clase, la carga solo puede ocurrir una vez. Y la inicialización se ejecutará solo cuando realice una instancia de clase, y se ejecutará cada vez que llame a new a la clase.

ahora cuando lo hace la clase cargas MyClass.new rubí MiClase buscará clase en la memoria si no se cargue esa clase, a continuación, llamar a su nuevo método para crear instanc

8

Bueno, initialize es llamado por new , mientras que el cuerpo de la clase se evalúa en la definición/carga de la clase.

Además, intente configurar una variable de instancia en el cuerpo de la clase o en initialize. Notará que este último pertenecerá al objeto creado, mientras que el primero pertenecerá a la instancia de clase (de ahí la variable de instancia de clase de nombre).