Comment un script Ruby détecte qu'il est en cours d'exécution dans RIR?

StackOverflow https://stackoverflow.com/questions/2226979

  •  19-09-2019
  •  | 
  •  

Question

J'ai un script Ruby qui définit une classe. Je voudrais le script pour exécuter l'instruction

BoolParser.generate :file_base=>'bool_parser'

uniquement lorsque le script est appelé comme un exécutable, pas quand il est require'd de irb (ou transmis sur la ligne de commande via -r). Que puis-je enrouler autour de la déclaration ci-dessus pour l'empêcher d'exécuter chaque fois que mon fichier Ruby est chargé?

Était-ce utile?

La solution

La condition $0 == __FILE__ ...

!/usr/bin/ruby1.8

class BoolParser

  def self.generate(args)
    p ['BoolParser.generate', args]
  end

end

if $0 == __FILE__
  BoolParser.generate(:file_base=>__FILE__)
end

... est vrai lorsque le script est exécuté à partir de la ligne de commande ...

$ /tmp/foo.rb
["BoolParser.generate", {:file_base=>"/tmp/foo.rb"}]

... mais faux lorsque le fichier est requis ou chargé par un autre script Ruby.

$ irb1.8
irb(main):001:0> require '/tmp/foo'
=> true
irb(main):002:0> 

Autres conseils

utiliser $ 0

iRB la valeur de 0 $ est "irb"

dans votre fichier est "/ chemin / vers / fichier"

une explication

scroll top