如何收集恐慌!争论?

时间:2016-06-15 15:39:56

标签: rust

如何在发出panic!(arg) arg之后收集它? This文档不明确。

执行panic!(42)时,我希望我的应用程序收集42并优雅地失败,而不是仅仅中止。

1 个答案:

答案 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); }        
            }
        }
    }
}