Есть ли вызов однострочной функции, которая завершает программу и отображает сообщение? Я знаю, что в Perl это очень просто:
die("Message goes here")
Я устал набирать это:
puts "Message goes here"
exit
Я знаю, что это не ответ, но он ответил на мой вопрос, спасибо
Для справки, в Python это sys.exit("Message goes to stderr").

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