Как создать сообщение о выходе

Есть ли вызов однострочной функции, которая завершает программу и отображает сообщение? Я знаю, что в Perl это очень просто:

die("Message goes here")

Я устал набирать это:

puts "Message goes here"
exit

Небольшой комментарий, ваш puts записывает в stdout, тогда как die записывает в stderr, поэтому: $stderr.puts "Message goes here".

cdarke 06.03.2012 14:39

Я знаю, что это не ответ, но он ответил на мой вопрос, спасибо

Patrick 27.07.2012 09:10

Для справки, в Python это sys.exit("Message goes to stderr").

anatoly techtonik 24.12.2014 17:40
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
211
3
104 039
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я никогда не слышал о такой функции, но ее было бы достаточно тривиально реализовать ...

def die(msg)
  puts msg
  exit
end

Затем, если это определено в каком-то файле .rb, который вы включаете во все свои сценарии, вы золотой .... только потому, что он не встроен, не означает, что вы не можете сделать это самостоятельно ;-)

Оказывается, это делает функция прерывания (см. Мой ответ ниже)

Chris Bunch 17.09.2008 22:51

Зачем писать код, если функция прерывания делает это за вас?

Gary Haran 01.08.2016 21:00

@ChrisBunch Это нет, то же самое, что и функция прерывания: по умолчанию exit возвращается, как если бы он был успешным. abort возвращает ошибку. exit 1 также вернет ошибку.

TemporalWolf 19.11.2016 00:33

Если вы хотите обозначить фактическую ошибку в своем коде, вы можете вызвать исключение RuntimeError:

raise RuntimeError, 'Message goes here'

Это напечатает трассировку стека, тип возникшего исключения и предоставленное вами сообщение. В зависимости от ваших пользователей трассировка стека может быть слишком пугающей, а фактическое сообщение может затеряться в шуме. С другой стороны, если вы умрете из-за фактической ошибки, трассировка стека предоставит вам дополнительную информацию для отладки.

Вам не нужно упоминать RuntimeError, чтобы вызвать его (это тип исключения по умолчанию), поэтому будет достаточно следующего кода: raise 'Сообщение идет сюда'

sunaku 17.03.2010 04:22

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

shevy 21.06.2017 21:12
Ответ принят как подходящий

Это делает функция abort. Например:

abort("Message goes here")

Примечание: сообщение abort будет записано в STDERR, а не в puts, которое будет писать в STDOUT.

Ух ты! Хорошая находка! Жаль, что они не просто перегрузили exit этой функцией ....

Mike Stone 18.09.2008 14:59

Обратите внимание, что при прерывании программа выходит со статусом false, что означает сбой. exit по умолчанию завершает работу со статусом «истина», что означает успех. Убедитесь, что вы используете тот, который подходит для ситуации.

Alex Spurling 14.11.2011 22:59

ре. Комментарий Майка Стоуна, иногда кажется, что Ruby был написан группой людей, которые не общались друг с другом, не так ли? (Тем не менее, на нем так легко программировать.)

JellicleCat 19.03.2012 20:34

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

Kernel.at_exit { puts "sayonara" }
# do whatever
# [...]
# call #exit or #abort or just let the program end
# calling #exit! will skip the call

Вызывается несколько раз, и будет зарегистрировано несколько обработчиков.

Другие вопросы по теме