Frage

Ich habe ein Ruby -Skript, das eine Klasse definiert. Ich möchte, dass das Skript die Anweisung ausführt

BoolParser.generate :file_base=>'bool_parser'

Nur wenn das Skript als ausführbare Datei aufgerufen wird, nicht, wenn es ist require'D von IRB (oder die Befehlszeile über weitergegeben über -r). Was kann ich um die obige Anweisung einwickeln, um zu verhindern, dass sie ausgeführt wird, wenn meine Ruby -Datei geladen wird?

War es hilfreich?

Lösung

Die Bedingung $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

... ist wahr, wenn das Skript aus der Befehlszeile ausgeführt wird ...

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

... aber falsch, wenn die Datei von einem anderen Ruby -Skript benötigt oder geladen wird.

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

Andere Tipps

Verwenden Sie $ 0

In IRB lautet der Wert von 0 USD "IRB"

In Ihrer Datei befindet sich "/path/to/Datei"

eine Erklärung hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top