В документации abort указано abort будет
Завершить выполнение немедленно, эффективно, вызвав Kernel.exit(false).
Что именно означает "сразу"? В чем разница между abort и exit с статусом не true?
В документации abort указано abort будет
Завершить выполнение немедленно, эффективно, вызвав Kernel.exit(false).
Что именно означает "сразу"? В чем разница между abort и exit с статусом не true?
" Exit, Exit! Abort, Raise... Get Me Outta Here!" описывает все, что вы хотите знать, я думаю.
Короче:
Kernel.exit(code) "немедленно выходит" из script и возвращает code в ОС, однако, перед тем, как это сделать, он вызывает любого зарегистрированного обработчика at_exit, который мог бы зарегистрировать ваш код.Kernel.exit!(code) делает то же самое, но вызывается сразу же, обработчики at_exit не вызываются.Kernel.abort(message) принимает message, который будет напечатан в STDERR непосредственно перед выходом с кодом ошибки = 1.Различные значения кодов выхода едва подходят для обнаружения проблем и отладки кода. Тем не менее, они очень просты в использовании и делают процесс чтения родителями почти тривиальным. Следовательно, exit и exit!.
Если вы можете потратить больше времени и сделать проверку ошибок более надежной, вам понадобятся серьезные сообщения об ошибках, а не только коды. Традиционно вы можете печатать их в STDERR, если они существуют. Вы можете печатать вручную в STDERR с помощью обычного puts, но коды выхода будут по-прежнему использоваться на самом низком уровне.
Печать в STDERR не помещает ваше задание автоматически как сбой, поэтому была создана abort, чтобы вы могли легко писать и уходить. Код завершения по умолчанию для 1 достаточно, чтобы отметить условие FAIL, так как он предположил, что вся содержащаяся контекстная информация будет включена в сообщения об ошибках, предоставленные вами.
Также обратите внимание, что любые незаданные исключения, такие как raise "wtf" без rescue в любом месте, фактически ведут себя так, как будто вызывают Kernel.abort: они печатаются в STDERR и используют exitcode=1.
Вы сказали exit(false), но в документации exit! указано, что параметр status code будет использоваться.
Я только что проверил это на Windows и Ruby 1.9.3:
exit 0 # quits with code: 0
exit 1 # quits with code: 1
exit false # quits with code: 1
exit true # quits with code: 0
что меня действительно удивляет, так как я предполагаю, что false будет принудительно применено к 0 традиционным способом C. Таким образом, возможно, вам лучше использовать целые числа, такие как 0 или 1, чтобы понять, какой код будет использоваться.