Il existe d'importantes différences entre les deux méthodes.
new
est une classe de la méthode, ce qui crée généralement une instance de la classe (il s'agit des choses difficiles comme l'allocation de mémoire que Ruby vous protège de sorte que vous n'avez pas trop sale).
Ensuite, initialize
, un exemple de la méthode, indique à l'objet de définir son état interne selon les paramètres demandés.
Chacun de ces programmes peut être remplacée en fonction de ce que vous voulez. Par exemple, Foo.new
pourrait en fait créer et retourner une instance de FooSubclass
si elle doit être assez intelligent pour le faire.
Cependant, il est souvent préférable de déléguer l'utilisation de tels cas, d'autres méthodes de la classe qui sont plus explicites sur ce qu'ils font, par exemple, Foo.relating_to(bar)
. Casser les autres peuples attentes sur les méthodes comme new
devrait ne va embrouiller les gens plus que ce qu'il va les aider dans le long terme.
Comme un exemple, regardez la mise en œuvre de l' Singleton
, un module qui permet à une seule instance d'une classe particulière d'exister. Il rend l' new
méthode privée, et expose une instance
méthode qui renvoie l'instance existante de l'objet, ou des appels new
si elle n'a pas encore été créé.