Подразумеваемая разница в классе исключений между версией ruby - PullRequest
2 голосов
/ 09 марта 2012

Извините за странный заголовок, я не совсем уверен, как классифицировать эту проблему. Я нахожусь в процессе обновления некоторого кода ruby ​​до 1.9.3, и вижу некоторое странное поведение. Отгадав вопрос, я получаю:

def convert(exception)
  raise exception.message
end

begin
  convert(StandardError.new(StandardError))
rescue => e
  puts e.class
end

В 1.9.2 вывод равен

StandardError

, а в 1.9.3 вывод равен

RuntimeError

Несмотря на то, что рубиновые документы и заметки о выпуске на самом деле не дали мне никаких подсказок относительно того, что здесь может происходить, любая помощь приветствуется!

1 Ответ

2 голосов
/ 09 марта 2012

Кажется, проблема в том, что до 1.9.3 Exception#message возвращал объект класса Class, , а не String, что вызывает странные вещи и в итоге возникает исключение с неожиданным классом (т. е. не RuntimeError).

Эта ошибка была исправлена ​​в этом коммите , и она присутствует в 1.9.3 changelog .

В конечном счете, вы действительно хотите raise exception, а не raise exception.message.

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