Error handling 如何在没有空匹配臂的情况下检索结果上的错误值?

Error handling 如何在没有空匹配臂的情况下检索结果上的错误值?,error-handling,rust,Error Handling,Rust,我有一个返回结果的函数。如果我想在出现错误时惊慌失措,我知道我可以使用match: fn foo() -> Result<(), u32> { Err(1234) } fn another() { match foo() { Err(n) => panic!("The error value is {}", n), Ok(_) => {} // an unsettling empty block... } }

我有一个返回
结果的函数。如果我想在出现错误时惊慌失措,我知道我可以使用
match

fn foo() -> Result<(), u32> {
    Err(1234)
}

fn another() {
    match foo() {
        Err(n) => panic!("The error value is {}", n),
        Ok(_) => {} // an unsettling empty block...
    }
}

似乎无法获得错误值。如何在上面的示例中检索
1234
值?

您不能使用if-let语法(在@shepmaster的注释中提到)吗

fn foo()->结果{
错误(1234)
}
fn过程错误(res:u32){
println!(“记录错误:{}”,res);
}
fn另一个(){
如果让Err(e)=foo(){
过程错误(e);
}
}

您的问题似乎可以用;;的答案来回答。如果没有,请回答您的问题以解释差异。否则,我们可以将此问题标记为已回答。@Shepmaster这是
如果let
语法,你是对的,谢谢。@Shepmaster-老实说,我是第一次这样做,但在我看来,标记为重复似乎是一个坏趋势。所有引用的副本都明确询问if-let语法。如果OP不知道If let,那么不回答问题(在评论中回答)又有什么帮助呢?这怎么会是复制品呢?这一趋势是否在SO参考文档中有所体现?@chub500标记为重复并不要求问题完全相同,而是要求由重复目标的答案来回答。这就是为什么顶部的框中写着“这个问题已经有答案了”。当前表单中的问题将永久保留并用作重定向(如果您未登录,则自动重定向),因此任何与OP具有相同措辞的人仍将在搜索引擎中找到匹配项。请不要回答重复的问题。我是否应该删除它?没有规则要求您必须删除,但我会删除。我认为答案的来源越少越好,这样维护起来就越容易。
fn another() {
    if foo().is_err() {
        panic!("The error value is x"); // how to get the "1234" here?
    }
}
fn foo() -> Result<(), u32> {
    Err(1234)
}

fn process_error(res: u32) {
    println!("Logging err: {}", res);
}

fn another() {
    if let Err(e) = foo() {
        process_error(e);
    }
}