放出された後にpanic!(arg)
さんのarg
をどうすれば回収できますか? This文書が明確ではありません。パニックを収集する方法!引数?
panic!(42)
私は自分のアプリケーションで42を収集し、中止するのではなく正常に機能しないようにします。
放出された後にpanic!(arg)
さんのarg
をどうすれば回収できますか? This文書が明確ではありません。パニックを収集する方法!引数?
panic!(42)
私は自分のアプリケーションで42を収集し、中止するのではなく正常に機能しないようにします。
引数を収集するには、Box<Any>
を具体的なタイプにダウンキャストします。あなたのケースでは、私はタイプi32
する42を強制的に:!
use std::thread::spawn;
fn main() {
let thread = spawn(|| { panic!(42_i32); });
let result = thread.join();
match result {
Ok(_) => { println!("thread join result ok"); }
Err(e) => {
match e.downcast::<i32>() {
Ok(e2) => { println!("Got an int error: {:?}", e2); }
Err(e3) => { println!("Got unknown error: {:?}", e3); }
}
}
}
}
なぜ' _i32'ですか? –
'Box
'パニックもし'あなたは、私は信じている...制御コードにされ、一般的には、勧告は[ 'Result']を使用することです(HTTPS ://doc.rust-lang.org/std/result/enum.Result.html)、それに応答したい場合は、パニックの代わりに 'Err(arg)'を返します。 –
私は理解していますが、それでも可能であると言いながら価値を「収集」したいと思います。 –
['catch_unwind()'](https://doc.rust-lang.org/std/panic/fn.catch_unwind.html)(Rust 1.9)は、解き放たれるパニックを処理する出発点になります! (プロセスを直ちに停止するものは除く)。 'arg'はそれが返す' Result'に含まれていなければなりません。 –