Как сценарий Ruby может обнаружить, что работает в irb?

У меня есть сценарий Ruby, который определяет класс. Я хотел бы, чтобы сценарий выполнил оператор

BoolParser.generate :file_base=>'bool_parser'

только, когда сценарий вызывается как исполняемый файл, не, когда это require'd от irb (или переданный командная строка через -r). Что я могу перенести оператор выше, чтобы препятствовать тому, чтобы он выполнил каждый раз, когда мой файл Ruby загружается?

5
задан ReWrite 9 February 2010 в 05:34
поделиться

2 ответа

Условие $ 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> 
13
ответ дан 18 December 2019 в 09:49
поделиться

используйте $ 0

в irb, значение $ 0 - «irb»

в вашем файле - «/ путь / к / файлу»

объяснение здесь

4
ответ дан 18 December 2019 в 09:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: