2010-01-29 13 views
5

Recentemente ho scoperto il Hanna RDoc template e mi piace molto più del valore predefinito. Voglio usarlo nel mio progetto, ma non voglio nemmeno che il mio progetto lo richieda.Recupero da mancata richiesta/carico nel rubino

L'unico cambiamento che ho dovuto fare per la mia Rakefile per ottenere il modello hanna al lavoro è stato quello di cambiare

require 'rake/rdoctask' 

a

require 'hanna/rdoctask' 

C'è un modo per tentare un richiedono, e la cattura/recupero dall'errore? Ho notato carico e richiedono restituire un valore booleano in IRB, così ho pensato che forse avrei potuto fare questo:

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

Purtroppo, rastrello interrotta non appena la richiedono fallito. Poi ho provato:

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

ma che non ha funzionato neanche.

C'è un modo per realizzare ciò che sto tentando qui?

+0

Questo qustion è un duplicato esatto di http://StackOverflow.Com/questions/2061528/ che contiene diverse risposte utili. –

risposta

4

L'ultima opzione dovrebbe funzionare.

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

opere sulla mia macchina, in esecuzione Rubino 1.8.7p248 con la gemma "rastrello" installato, ma non la gemma "hanna". Sei sicuro di avere i rubygems richiesti nel tuo ambiente? Altrimenti, richiedere "rake/rdoctask" potrebbe anche fallire.

+0

richiede 'rubygems' è nel rakefile, ma ciò non dovrebbe avere importanza in quanto ho il valore rubygems impostato in RUBYOPT. – Herms

+0

Che ha funzionato. Non sono sicuro del motivo per cui il mio tentativo iniziale stava fallendo. – Herms

+2

Poiché non hai salvato 'LoadError', hai salvato' StandardError' che è l'impostazione predefinita se non viene specificata alcuna eccezione. –

3

ho notato carico e richiedono restituire un valore booleano in IRB

Il valore di ritorno di require indica se la biblioteca era realtà caricato: è true se la libreria è stato caricato e false se la libreria è stato trovato ma non caricato perché era stato caricato già.

Il guasto è indicato con un'eccezione LoadError.