방출 후 panic!(arg)
님의 arg
을 어떻게 수령 할 수 있습니까? This 설명서가 명확하지 않습니다.공포를 수집하는 방법! 논의?
panic!(42)
할 때 내 응용 프로그램을 42 수집하고 그냥 실패하는 대신 우아하게 실패합니다.
방출 후 panic!(arg)
님의 arg
을 어떻게 수령 할 수 있습니까? This 설명서가 명확하지 않습니다.공포를 수집하는 방법! 논의?
panic!(42)
할 때 내 응용 프로그램을 42 수집하고 그냥 실패하는 대신 우아하게 실패합니다.
인수를 수집하려면 Box<Any>
을 구체적인 유형으로 다운 캐스팅하십시오. 귀하의 경우, I 타입 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에 포함되어야합니다. –