2010-01-29 18 views
5

我最近发现了Hanna RDoc template,我比默认更喜欢它。我想在我的项目中使用它,但我也不希望我的项目需要它。从ruby中的require/load失败中恢复

我不得不让我的Rake文件,以获得汉娜模板的工作,唯一的变化是改变

require 'rake/rdoctask' 

require 'hanna/rdoctask' 

有没有什么办法来尝试要求,并捕获/从错误中恢复?我注意到负荷,需要在IRB返回一个布尔值,所以我想也许我可以这样做:

unless require 'hanna/rdoctask' 
    require 'rake/rdoctask' 
end 

可悲的是,耙只要需要失败中止。然后我尝试了:

begin 
    require 'hanna/rdoctask' 
rescue 
    require 'rake/rdoctask' 
end 

但是那也没用。

有什么办法可以完成我在这里尝试的吗?

+0

此qustion是http://StackOverflow.Com/questions/2061528/其中包含几个有用的答案的确切副本。 – 2010-01-30 04:46:39

回答

4

你最后的选择应该工作。

require 'rubygems' 
begin 
    require 'hanna/rdoctask' 
rescue LoadError 
    puts 'Hanna rdoc unavailable, falling back to rake' 
    require 'rake/rdoctask' 
end 

在我的机器上运行,运行安装了“rake”gem的Ruby 1.8.7p248,但不是“hanna”gem。虽然你确定你的环境中需要rubygems吗?如果不是,则需要'rake/rdoctask'也可能失败。

+0

要求'rubygems'在rakefile中,但这应该不重要,因为我已经在RUBYOPT中设置了rubygems值。 – Herms 2010-01-29 19:31:15

+0

工作。不知道为什么我最初的尝试失败了。 – Herms 2010-01-29 19:46:27

+2

因为你没有拯救'LoadError',所以你拯救了'StandardError',如果没有指定异常,这是默认的。 – 2010-01-30 04:43:10

3

我注意到负荷,需要在IRB返回一个布尔

require返回值告诉你的库是否实际上加载:这是true如果库加载并false如果库被发现但没有加载,因为它已经加载了已经

失败以LoadError异常表示。