Como um script de rubi pode detectar que está em execução no IRB?
Pergunta
Eu tenho um script de rubi que define uma classe. Eu gostaria que o script execute a declaração
BoolParser.generate :file_base=>'bool_parser'
Somente quando o script é invocado como executável, não quando é require
'D do IRB (ou passou na linha de comando via -r
). O que posso envolver a declaração acima para impedir que ela seja executada sempre que meu arquivo Ruby for carregado?
Solução
A condição $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
... é verdade quando o script é executado a partir da linha de comando ...
$ /tmp/foo.rb
["BoolParser.generate", {:file_base=>"/tmp/foo.rb"}]
... mas false quando o arquivo é necessário ou carregado por outro script Ruby.
$ irb1.8
irb(main):001:0> require '/tmp/foo'
=> true
irb(main):002:0>
Outras dicas
Use $ 0
No IRB, o valor de $ 0 é "irb"
no seu arquivo está "/caminho/para/arquivo"
uma explicação aqui
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow