Как сценарий Ruby может обнаружить, что он работает в IRB?
Вопрос
У меня есть сценарий рубины, который определяет класс. Я бы хотел, чтобы сценарий выполнил оператор
BoolParser.generate :file_base=>'bool_parser'
Только когда сценарий вызывается как исполняемый файл, а не когда он require
'D из IRB (или передано в командную строку через -r
) Что я могу обернуть вокруг приведенного выше оператора, чтобы он не выполнял его всякий раз, когда загружается мой рубиновый файл?
Решение
Состояние $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
... это правда, когда сценарий запускается из командной строки ...
$ /tmp/foo.rb
["BoolParser.generate", {:file_base=>"/tmp/foo.rb"}]
... но ложь, когда файл требуется или загружен другим сценарием рубина.
$ irb1.8
irb(main):001:0> require '/tmp/foo'
=> true
irb(main):002:0>
Другие советы
Не связан с StackOverflow