Ruby Language Nouveau, allouer et initialiser


Exemple

Dans de nombreux langages, de nouvelles instances d'une classe sont créées à l'aide d'un new mot-clé spécial. Dans Ruby, new est également utilisé pour créer des instances d'une classe, mais ce n'est pas un mot clé; au lieu de cela, c'est une méthode statique / classe, pas différente de toute autre méthode statique / classe. La définition est à peu près ceci:

class MyClass
   def self.new(*args)
     obj = allocate
     obj.initialize(*args) # oversimplied; initialize is actually private
     obj
   end
end

allocate effectue la véritable «magie» de la création d'une instance non initialisée de la classe

Notez également que la valeur de retour de initialize est ignorée et que obj est renvoyé à la place. Cela rend immédiatement clair pourquoi vous pouvez coder votre méthode initialize sans se soucier de retourner l' self à la fin.

La new méthode «normale» que toutes les classes obtiennent de Class fonctionne comme ci-dessus, mais il est possible de la redéfinir comme vous le souhaitez ou de définir des alternatives qui fonctionnent différemment. Par exemple:

class MyClass
  def self.extraNew(*args)
    obj = allocate
    obj.pre_initialize(:foo)
    obj.initialize(*args)
    obj.post_initialize(:bar)
    obj
  end
end