【发布时间】:2010-02-09 05:34:01
【问题描述】:
我有一个定义类的 Ruby 脚本。我希望脚本执行语句
BoolParser.generate :file_base=>'bool_parser'
仅当脚本作为可执行文件被调用时,而不是当它是来自 irb 的require'd(或通过-r 在命令行上传递)时。我可以用什么包裹上面的语句以防止它在我的 Ruby 文件加载时执行?
【问题讨论】:
我有一个定义类的 Ruby 脚本。我希望脚本执行语句
BoolParser.generate :file_base=>'bool_parser'
仅当脚本作为可执行文件被调用时,而不是当它是来自 irb 的require'd(或通过-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 脚本需要或加载该文件时为 false。
$ irb1.8
irb(main):001:0> require '/tmp/foo'
=> true
irb(main):002:0>
【讨论】:
【讨论】: