从ruby中的require/load失败中恢复

Her*_*rms 5 ruby rake

我最近发现了Hanna RDoc模板,我比它更喜欢它.我想在我的项目中使用它,但我也不希望我的项目需要它.

为了让hanna模板工作,我必须对Rakefile做出的唯一改变就是改变

require 'rake/rdoctask'
Run Code Online (Sandbox Code Playgroud)

require 'hanna/rdoctask'
Run Code Online (Sandbox Code Playgroud)

有没有办法尝试一个require,并从错误中捕获/恢复?我注意到load并且需要在irb中返回一个布尔值,所以我想也许我可以这样做:

unless require 'hanna/rdoctask'
  require 'rake/rdoctask'
end
Run Code Online (Sandbox Code Playgroud)

可悲的是,一旦要求失败,耙子就会中止.然后我尝试了:

begin
  require 'hanna/rdoctask'
rescue
  require 'rake/rdoctask'
end
Run Code Online (Sandbox Code Playgroud)

但那也不起作用.

有没有办法完成我在这里尝试的东西?

Gre*_*ell 4

你的最后一个选择应该有效。

require 'rubygems'
begin
  require 'hanna/rdoctask'
rescue LoadError
  puts 'Hanna rdoc unavailable, falling back to rake'
  require 'rake/rdoctask'
end
Run Code Online (Sandbox Code Playgroud)

在我的机器上运行,运行 Ruby 1.8.7p248,安装了“rake”gem,但没有安装“hanna”gem。不过,您确定您的环境中需要 ruby​​gems 吗?如果不是,要求“rake/rdoctask”也可能会失败。

  • 因为您没有拯救“LoadError”,所以您拯救了“StandardError”,如果没有指定异常,它是默认值。 (2认同)