Восстановление после сбоя require / load в ruby - PullRequest
5 голосов
/ 29 января 2010

Недавно я обнаружил шаблон Hanna RDoc , и он мне нравится намного больше, чем по умолчанию. Я хочу использовать это в своем проекте, но я также не хочу, чтобы мой проект требовал этого.

Единственное изменение, которое мне пришлось внести в мой Rakefile, чтобы заставить работать шаблон Hanna, было изменение

require 'rake/rdoctask'

до

require 'hanna/rdoctask'

Есть ли способ попытаться выполнить требование и зафиксировать / исправить ошибку? Я заметил load и требовал вернуть логическое значение в irb, поэтому подумал, что, возможно, я смогу сделать это:

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

К сожалению, грабли прерваны, как только требование не выполнено. Тогда я попробовал:

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

но это тоже не сработало.

Есть ли способ выполнить то, что я пытаюсь здесь?

Ответы [ 2 ]

4 голосов
/ 29 января 2010

Ваш последний вариант должен работать.

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

работает на моей машине с Ruby 1.8.7p248 с установленным гемом "rake", но не с гемом "hanna". Вы уверены, что в вашей среде требуются рубины? В противном случае требование 'rake / rdoctask' также может завершиться ошибкой.

3 голосов
/ 30 января 2010

Я заметил загрузку и требую вернуть логическое значение в irb

Возвращаемое значение require говорит вам, была ли библиотека фактически загружена: это true, если библиотека была загружена, и false, если библиотека была найдена, но не загружена, потому что она имела 1010 * уже загружен.

Ошибка указана с исключением LoadError.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...