2010-02-09 14 views
5

Ho uno script Ruby che definisce una classe. Vorrei lo script per eseguire l'istruzioneIn che modo uno script Ruby può rilevare che è in esecuzione in irb?

BoolParser.generate :file_base=>'bool_parser' 

solo quando lo script viene invocato come un file eseguibile, non quando è require 'D da IRB (o superato sulla linea di comando tramite -r). Cosa posso avvolgere attorno alla precedente istruzione per impedirne l'esecuzione ogni volta che viene caricato il mio file Ruby?

risposta

13

La condizione $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 

... è vero quando lo script viene eseguito dalla riga di comando ...

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

... ma falso quando il file è richiesto o caricato da un altro script rubino.

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

utilizzare $ 0

nella IRB del valore di $ 0 è "IRB"

nel file è "/ path/to/file"

una spiegazione here

Problemi correlati