web-dev-qa-db-fra.com

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

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

def a():
    ...
def b():
    ...
if __== '__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 de Ruby?

97
Imagist

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

MODIFIER: Je l'ai trouvé.

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

Mais ce n'est certainement pas courant.

124
Matchu

Si la trace de pile est vide, nous pouvons commencer à exécuter à droite et à gauche. Je ne sais pas si cela est utilisé de manière conventionnelle ou non, car je suis en Ruby pendant 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
11
uKolka