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