如何在发出panic!(arg)
arg
之后收集它? This文档不明确。
执行panic!(42)
时,我希望我的应用程序收集42并优雅地失败,而不是仅仅中止。
答案 0 :(得分:2)
要收集参数,请将Box<Any>
转换为具体类型。在你的情况下,我强迫42成为i32
类型:
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); }
}
}
}
}