abort
ドキュメントには、abort
効果的にKernel.exit(false)を呼び出して、すぐに実行を終了します。
「即座に」とはどういう意味ですか? abort
とexit
のステータスがtrue
以外の場合の違いは何ですか?
" 終了、終了!中止、レイズ…Get Me Outta Here! "は、あなたが知りたいと思うすべてを説明しています。
要するに:
Kernel.exit(code)
スクリプトをすぐに「終了」し、code
をOSに返しますが、実行する直前に、コードが持つことができる登録済みのat_exit
ハンドラーを呼び出します登録済み。Kernel.exit!(code)
は同じことを行いますが、すぐに終了し、at_exit
ハンドラーは呼び出されません。Kernel.abort(message)
はmessage
を取り、失敗コード= 1で終了する直前にSTDERRに出力されます。終了コードの異なる値は、問題の検出とコードのデバッグにほとんど適していません。ただし、使用方法は非常に簡単で、親プロセスにそれらを読み取らせることはほとんど簡単です。したがって、exit
およびexit!
です。
より多くの時間を費やしてエラーチェックをより堅牢にできる場合は、コードだけでなく、いくつかの重大なエラーメッセージが必要になります。従来、存在する場合は、STDERRに出力できます。通常のputs
を使用して手動でSTDERRに印刷できますが、終了コードは最低レベルで使用されます。
STDERRへの印刷では、ジョブが自動的に失敗としてマークされることはないため、abort
は作成して簡単に終了できるように作成されました。デフォルトの終了コード1は、すべての実際のコンテキスト情報が提供されるエラーメッセージに含まれると想定されているため、FAIL条件をマークするには十分です。
また、rescue
を持たないraise "wtf"
などの未処理の例外は、実際には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
が従来のCの方法で0
に強制されると思うので、これは本当に驚きです。そのため、使用するコードを完全に明確にするために、0
や1
などの整数を使用する必要があります。