¿Cómo puede un script de Ruby detectar que se está ejecutando en IRB?
Pregunta
Tengo un script de rubí que define una clase. Me gustaría que el script ejecute la declaración
BoolParser.generate :file_base=>'bool_parser'
solo cuando el script se invoca como ejecutable, no cuando es require
'D de IRB (o pasado en la línea de comando a través de -r
). ¿Qué puedo envolver la declaración anterior para evitar que se ejecute cada vez que se cargue mi archivo Ruby?
Solución
La condición $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
... es cierto cuando el script se ejecuta desde la línea de comando ...
$ /tmp/foo.rb
["BoolParser.generate", {:file_base=>"/tmp/foo.rb"}]
... pero falso cuando el archivo es requerido o cargado por otro script de Ruby.
$ irb1.8
irb(main):001:0> require '/tmp/foo'
=> true
irb(main):002:0>
Otros consejos
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow