38 votes

Ruby : initialize() vs class body ?

En Ruby, quelle est la différence entre mettre du code dans un fichier de type initialize() plutôt que directement dans le corps de la classe ? Les deux semblent être exécutés lors de l'appel MyClass.new .

Clairement, initialize() peut accepter des paramètres, mais est-ce là la seule différence ?

class MyClass
  puts 'Hello'

  def initialize(params)
    puts 'World'
  end
end

61voto

demas Points 10567

Essayez de créer deux instances de MyClass

a = MyClass.new
b = MyClass.new

pour voir la différence :

Bonjour

Monde

Monde

Le code dans le corps de la classe ne s'exécute qu'une seule fois - lorsque ruby charge le fichier. initialize() s'exécute chaque fois que vous créez une nouvelle instance de votre classe.

9voto

Michael Kohl Points 33345

Bien, initialize est appelé par new tandis que le corps de la classe est évalué lors de la définition/du chargement de la classe.

De plus, essayez de définir une variable d'instance dans le corps de la classe ou dans le fichier initialize . Vous remarquerez que ce dernier appartiendra à l'objet créé, alors que le premier appartiendra à l'instance de la classe (d'où le nom de variable d'instance de classe).

3voto

Naren Sisodiya Points 4180

Si vous écrivez un code dans le corps de la classe, il sera exécuté lorsque ruby chargera cette classe, le chargement ne peut se faire qu'une seule fois. Et initialize sera exécuté seulement quand vous faites une instance de la classe, et il sera exécuté chaque fois que vous appelez new à la classe.

maintenant quand vous faites MyClass.new ruby charge la classe MyClass il va chercher la classe en mémoire si elle ne l'est pas alors charge cette classe, puis appelle sa méthode new pour créer l'instanc

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X