2014-09-15 1 views
2

Я пишу утилиту командной строки в Ruby и кодирую логику, которая проверяет правильность сочетания аргументов. Если я нахожу ошибку, в чем преимущество повышения аргумента ArgumentError или call abort() на месте, если я не намерен восстанавливаться? В общем, когда целесообразно поднять исключение вместо прерывания, если не планируется попытки восстановления? Я предполагаю, что маршрут исключения рекомендуется, требуется некоторая грациозная остановка, а не просто возврат к командной строке.Лучше отменять() или повышать() ошибку аргумента в Ruby?

ответ

6

Всегда, всегда делайте исключения, предпочитая прерывание. Отмена является уродливым и действительно последним видом взлома, который вы используете, если вы действительно не можете значимо продолжать.

Вы можете продолжить работу после ArgumentError: вы можете указать пользователю, что такое правильный синтаксис, и вы можете распечатать справочное сообщение. Или, может быть, позже вы повторите использование парсера аргументов в другом проекте, который может обрабатывать ошибки. (Действительно, общая идиома заключается в вызове парсера аргументов в блоке исключений и распечатке справочного сообщения, если парсер аргументов вызывает ошибку).

В любом случае поведение по умолчанию ArgumentError похоже на прерывание, но вы можете сделать с ним намного больше. По-моему, вы должны пойти с этим более гибким решением.

+0

Мне нравится идея сообщения справки. Как минимум, я могу отобразить результаты вызова утилиты с помощью «--help». –

+2

@AndreasYankopolus: Большинство служебных программ отображают сообщение об использовании (возможно, не полноправную помощь) при вводе неверной командной строки. Это делается как любезность для пользователя, чтобы помочь им запомнить, как использовать эту команду. – nneonneo

+0

@steenslag: ОК, изменил язык. – nneonneo

0

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

Смежные вопросы