6

我有一个定义类的 Ruby 脚本。我希望脚本执行语句

BoolParser.generate :file_base=>'bool_parser'

仅当脚本作为可执行文件调用时,而不是require从 irb 'd (或通过命令行传递-r)。我可以用什么包裹上面的语句以防止它在我的 Ruby 文件加载时执行?

4

2 回答 2

15

条件$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​​ 脚本需要或加载该文件时为 false。

$ irb1.8
irb(main):001:0> require '/tmp/foo'
=> true
irb(main):002:0> 
于 2010-02-09T06:06:49.170 回答
5

使用 $0

在 irb 中,$0 的值是“irb”

在您的文件中是“/path/to/file”

这里有一个解释

于 2010-02-09T05:40:51.363 回答