116 votes

`if __name__ == '__main __'` équivalent en Ruby

Je suis nouveau à Ruby. Je cherche à importer des fonctions à partir d'un module contenant un outil que je veux continuer à utiliser séparément. En Python, je ferais simplement ceci:

 def a():
    ...
def b():
    ...
if __name__ == '__main__':
    a()
    b()
 

Cela me permet d'exécuter le programme ou de l'importer en tant que module pour utiliser a() et / ou b() séparément. Quel est le paradigme équivalent en Ruby?

151voto

Matchu Points 37755

D'après le Ruby que j'ai vu à l'état sauvage (bien entendu, pas une tonne), ce n'est pas un modèle de conception Ruby standard. Les modules et les scripts sont supposés rester séparés, donc je ne serais pas surpris s'il n'y a pas vraiment de bonne façon de le faire.

EDIT: trouvé.

 if __FILE__ == $0
    foo()
    bar()
end
 

Mais ce n'est certainement pas commun.

12voto

uKolka Points 2590

Si la trace de pile est vide, nous pouvons commencer à exécuter à droite et à gauche. Je ne sais pas si c'est utilisé de manière conventionnelle ou non conventionnelle puisque je suis passionné de Ruby depuis environ une semaine

 if caller.length == 0
  # do stuff
end
 

Preuve de concept:

fichier: test.rb

 #!/usr/bin/ruby                                                                 

if caller.length == 0
  puts "Main script"
end

puts "Test"
 

fichier: shmest.rb

 #!/usr/bin/ruby -I .                                                            

require 'test.rb'

puts "Shmest"
 

Usage:

 $ ./shmest.rb 
Test
Shmest

$ ./test.rb
Main script
Test
 

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