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

StackOverflow https://stackoverflow.com/questions/2226979

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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> 

Другие советы

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

В IRB стоимость $ 0 составляет "IRB"

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top