Domanda

Ho uno script di Ruby che definisce una classe. Vorrei lo script per eseguire l'istruzione

BoolParser.generate :file_base=>'bool_parser'

solo quando lo script viene invocato come un file eseguibile, non quando è require'd dalla IRB (o superato sulla linea di comando tramite -r). Cosa posso avvolgere intorno alla dichiarazione di cui sopra per evitare che l'esecuzione ogni volta che il mio file Rubino è caricato?

È stato utile?

Soluzione

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 da linea di comando ...

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

... ma falso quando è richiesta o caricato da un altro script Ruby il file.

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

Altri suggerimenti

utilizzare $ 0

nel IRB il valore di $ 0 è "IRB"

nel file è "/ path / to / file"

una spiegazione qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top