Как скрипт Ruby может обнаружить, что он работает в irb? - PullRequest
5 голосов
/ 09 февраля 2010

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

BoolParser.generate :file_base=>'bool_parser'

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

Ответы [ 2 ]

13 голосов
/ 09 февраля 2010

Состояние $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"}]

... но false, если файл требуется или загружен другим скриптом ruby.

$ irb1.8
irb(main):001:0> require '/tmp/foo'
=> true
irb(main):002:0> 
4 голосов
/ 09 февраля 2010

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

в irb значение $ 0 равно "irb"

в вашем файле "/ path / to / file"

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

...