Вот Это Да! Хорошая находка! Жаль, что они не просто перегружали выход этой функцией ...
Майк Стоун,
56
Обратите внимание: отмена выхода из программы со статусом false, что означает сбой. выход по умолчанию завершается со статусом true, представляющим успех. Убедитесь, что вы используете правильный для ситуации.
Алекс Сперлинг
1
число рейнольдса Комментарий Майка Стоуна, иногда кажется, что Ruby написана группой людей, которые не общались друг с другом, не так ли? (Тем не менее, в нем так легко программировать.)
JellicleCat
24
Если вы хотите обозначить фактическую ошибку в вашем коде, вы можете вызвать RuntimeErrorисключение:
raise RuntimeError,'Message goes here'
Это напечатает трассировку стека, тип возбуждаемого исключения и сообщение, которое вы предоставили. В зависимости от ваших пользователей, трассировка стека может быть слишком страшной, и реальное сообщение может потеряться в шуме. С другой стороны, если вы умрете из-за реальной ошибки, трассировка стека даст вам дополнительную информацию для отладки.
Вам не нужно упоминать RuntimeError, чтобы поднять единицу (это тип исключения по умолчанию), поэтому будет достаточно следующего кода: поднять «Message here here»
sunaku
sunaku - хотя ваш комментарий совершенно действителен, я часто обнаруживал, что более явное замечание может быть полезно, особенно для других людей, читающих код позже.
Шеви
2
Я никогда не слышал о такой функции, но ее было бы достаточно просто реализовать ...
def die(msg)
puts msg
exit
end
Затем, если это определено в каком-то файле .rb, который вы включаете во все свои сценарии, вы - золотой… просто потому, что он не встроен, не означает, что вы не можете сделать это сами ;-)
Оказывается, функция 'abort' делает это (см. Мой ответ ниже)
Крис Банч
1
Зачем писать код, если функция прерывания делает это за вас?
Гэри Харан
2
@ChrisBunch Это не то же самое, что функция отмены : по exitумолчанию возвращается, как если бы это было успешно. abortвозвращает сбой. exit 1также вернет ошибку.
TemporalWolf
2
Я попал сюда в поисках способа выполнить некоторый код всякий раз, когда программа заканчивается. Нашел это :
Kernel.at_exit { puts "sayonara"}# do whatever# [...]# call #exit or #abort or just let the program end# calling #exit! will skip the call
Вызывается несколько раз, чтобы зарегистрировать несколько обработчиков.
puts
записи на стандартный вывод, аdie
записи на стандартный вывод, так:$stderr.puts "Message goes here"
.sys.exit("Message goes to stderr")
.Ответы:
abort
Функция делает это. Например:Примечание:
abort
сообщение будет записаноSTDERR
вместо того, вputs
которое будет записаноSTDOUT
.источник
Если вы хотите обозначить фактическую ошибку в вашем коде, вы можете вызвать
RuntimeError
исключение:Это напечатает трассировку стека, тип возбуждаемого исключения и сообщение, которое вы предоставили. В зависимости от ваших пользователей, трассировка стека может быть слишком страшной, и реальное сообщение может потеряться в шуме. С другой стороны, если вы умрете из-за реальной ошибки, трассировка стека даст вам дополнительную информацию для отладки.
источник
Я никогда не слышал о такой функции, но ее было бы достаточно просто реализовать ...
Затем, если это определено в каком-то файле .rb, который вы включаете во все свои сценарии, вы - золотой… просто потому, что он не встроен, не означает, что вы не можете сделать это сами ;-)
источник
exit
умолчанию возвращается, как если бы это было успешно.abort
возвращает сбой.exit 1
также вернет ошибку.Я попал сюда в поисках способа выполнить некоторый код всякий раз, когда программа заканчивается.
Нашел это :
Вызывается несколько раз, чтобы зарегистрировать несколько обработчиков.
источник