Qwe(Option<usize>, Vec<i32>);
fn new() -> Qwe {
Qwe(Some(0), vec![5])
}
fn read_x(stream: &mut Qwe, cancel_flag: bool) -> i32 {
let idx = stream.0.take().expect("valid Qwe");
if cancel_flag { panic!(); }
let x = stream.1[idx];
std::mem::replace(stream, Qwe::new());
x
}
А теперь попробуем эту фигню вызвать вот так:
let qwe = Arc::new(Mutex::new(Qwe::new()));
let clo = Arc::clone(&qwe);
catch_unwind(move || read_x(&mut *clo.lock().unwrap(), true));
read_x(&mut *qwe.lock().unwrap(), false);
Предскажешь результат?
Я туго понимаю, почему паника используется, да и в целом мой парсер (в голове) раста так себе. В данном случае, по-моему, паника (из-за cancel flag)
Обсуждают сегодня