2010-01-29 62 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異常表示。