2016-06-30 3 views
1

Panic!は開発モード中にプログラムを停止する正しい方法のようです。しかし、一つは除外エラーのようなメッセージを表示するプログラムを出荷しないでください。どのようにパニックに!生産中に

thread '<main>' panicked at 'error message:()', x.rs:785 

は、開発者指向のテキストを表示せず、エラーコードで早期にプログラムを終了する方法はありますか?私はprocess::exitを使うことができましたが、それはクリーンアップを実行しないので、私たちは何を使うべきですか?

+2

[錆びたエラー処理](https://doc.rust-lang.org/book/error-handling.html)に関する記事を参照してください。エラー処理についての詳細な情報は、[この記事](http://joeduffyblog.com/2016/02/07/the-error-model/)でも読んでください。 – nemo

答えて

7

panic!は、プログラムを停止する正しい方法ではありません。

唯一の目的は、すべてが南に向かい、回復する方法がないときに中止することです。どこかで間違った動作が予想される場合は、Resultを使用し、素晴らしいメッセージを印刷して正常に終了することでその動作から回復してください。

コードにpanic!sまたはassert!イオンがあり、トリガーすると、表示されるメッセージが表示される唯一の正しいものです。コード内にバグがあり、バグから回復するためのきれいな方法がないためです。

panic!は必ずしもクリーンアップを実行するとは限りません。パニックになり、Drop implで別のパニックが発生した場合、プログラムは単に中止されます。また、パニック時にクリーンアップをオフにし、単にpanic!で中止するrustcの設定があります。

+0

ありがとう! "きれいに終了" - >それは私の問題です。私は 'process :: exit'が" clean "ではないことを読んでいます。 –

+0

' process :: exit'は 'panic! 'よりも"クリーン "ではありません。 'パニック'はあなたの設定に依存してデストラクタを実行しようとするかもしれないが、クリーンアップコードを実行しようとしないことが保証されている –

+1

私はRustプログラムを "きれいに"終了することを知っている唯一の方法は、 exit *あなたのコードの明示的な部分*。 *魔法は「きれいにすべてをシャットダウン」して波動することはありません。あなたが*試すことができることの1つは、別の "モニタ"プロセスでクリーンアップロジックを持つことですが、それは明示的に自分自身で書く必要があります。 –

関連する問題