Обратите внимание, что в ruby:
abort "Ура, вы выиграли!"
выйдет из программы с нужным сообщением, а
exit "Ура, вы выиграли!"
выдаст ошибку:
in `exit': no implicit conversion of String into Integer (TypeError)
abort
— завершение программы, которое лучше использовать в случае какой-то ошибки. Этот метод принимает в качестве параметра сообщение об ошибке.exit
— завершение программы (в т.ч. и обычное, по сценарию). Этот метод в качестве параметра принимает число, код возврата.
Каждая программа после своей работы возвращает какое-то число. Попробуйте написать так (для mac/linux):
ls
echo $?
Увидите 0, т.к. ls
отработала нормально.
А попробуйте так
ls file_that_do_not_exist.txt
echo $?
Будет 2 (если, конечно файла file_that_do_not_exist.txt
действительно нет в текущей папке) — именно такой «код возврата» возвращает команда ls
, когда файл не найден.
В ruby exit 2
как раз сделает так, что Ваша программа закончит работу с кодом возврата 2.
В примере из вопроса руби увидел exit
, увидел его аргумент, попытался привести строку к числу и потерпел неудачу. О чем и написал ;)
Если вызвать exit
без аргумента, то он выйдет из программы с кодом 0: Все хорошо
. Так и надо его вызывать, если программу нужно просто прекратить.
p.s. Почитайте про код ответа на досуге.
В простых скриптах на руби, пока ваши программы простые — это ок.
Как только вы начнете писать програмы, которые состоят больше, чем из одного файла. И уж тем более, когда начнете разработку на ruby on rails — про abort
и про exit
придется забыть. Там они не используются, т.к. сервер в ответ на любой запрос должен что-то ответить. То есть любая ошибка (500 или 404) — это штатная работа веб-сервера.