小编Gab*_*ori的帖子

匹配和解包之间的不同行为

我做了一个小程序,它显示了一种我无法解释的奇怪行为。我正在使用 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)

第一个按预期执行打印语句,而最后一个在第二次解包时出现恐慌。

一旦没有错误传播、隐式转换或其他可以解释这一点的东西,这对我来说就很奇怪。这里的问题与错误本身无关,而是与两个代码之间的差异有关。

error-handling rust

5
推荐指数
1
解决办法
237
查看次数

标签 统计

error-handling ×1

rust ×1