我做了一个小程序,它显示了一种我无法解释的奇怪行为。我正在使用 rodio crate 来尝试一些音频东西。
我已经完成了两个程序,在我看来,它们应该给出相同的结果。
我使用第一个匹配来处理错误:
let sink : Option<Sink> = match rodio::OutputStream::try_default() {
Ok((_, handle)) => {
match Sink::try_new(&handle) {
Ok(s) => Some(s),
Err(_e) => None,
}
},
Err(_e) => None,
};
println!("{}", sink.unwrap().len());
Run Code Online (Sandbox Code Playgroud)
在上一篇中,我使用了 unwrap 来代替。
let (_, handle) = rodio::OutputStream::try_default().unwrap();
let s = Sink::try_new(&handle).unwrap();
println!("{}",s.len());
Run Code Online (Sandbox Code Playgroud)
第一个按预期执行打印语句,而最后一个在第二次解包时出现恐慌。
一旦没有错误传播、隐式转换或其他可以解释这一点的东西,这对我来说就很奇怪。这里的问题与错误本身无关,而是与两个代码之间的差异有关。