48 votes

Qu'est-ce que "main" en Ruby ?

Si j'exécute ce fichier en tant que " ruby x.rb " :

class X
end
x = X.new

Quelle est la chose qui appelle " X.new " ?

S'agit-il d'un objet/processus/etc ?

54voto

Chuck Points 138930

En Ruby, tout se passe dans le contexte d'un objet. L'objet de premier niveau est appelé "main". Il s'agit en fait d'une instance d'Object avec la propriété spéciale que toutes les méthodes qui y sont définies sont ajoutées comme méthodes d'instance d'Object (elles sont donc disponibles partout).

On peut donc faire un script composé entièrement de :

puts object_id
@a = 'Look, I have instance variables!'
puts @a

et il imprimera "105640" et "Regardez, j'ai des variables d'instance !".

Ce n'est pas quelque chose dont vous devez généralement vous préoccuper, mais c'est là.

13voto

Igor Krivokon Points 6999

L'appelant de haut niveau est un objet main, qui est de la classe Object.

Essayez ce programme ruby :

p self
p self.class

3voto

Charlie Martin Points 62306

C'est la classe X. Vous invoquez la méthode "new" qui crée un objet de la classe X. Donc, si vous exécutez ce texte comme un script, Ruby :

  • crée une nouvelle classe X qui est une sous-classe d'Object, et qui hérite automatiquement (en tant que sous-classe d'Object) de certaines méthodes, parmi lesquelles new est un.
  • crée un nom x
  • appelle le new sur cette nouvelle classe X , créant un objet d'instance X ; x obtient une référence à cet objet.

2voto

workmad3 Points 12974

C'est l'interpréteur ruby qui exécute la ligne

x = X.new

Comme avec de nombreux langages de script, le script est interprété de haut en bas plutôt que d'avoir une méthode de point d'entrée standard comme la plupart des langages compilés.

1voto

Tim Hoolihan Points 6982

Comme l'a dit Charlie Martin, X.new est un appel au constructeur de la classe X, qui renvoie un objet de type X, stocké dans la variable x.

D'après votre titre, je pense que vous cherchez un peu plus. Ruby n'a pas besoin d'un main, il exécute le code dans l'ordre où il le voit. Les dépendances doivent donc être incluses avant d'être appelées.

Votre main est donc tout code de style procédural qui est écrit en dehors d'une définition de classe ou de module.

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