首页 > 解决方案 > 有没有办法从闭包内部的函数返回?

问题描述

我有以下简化代码:

fn f() -> i32 {
    let a = some_result.unwrap_or_else(|_| {
        return 1; // want to return this value from f <-------------
    });
}

1在这个特定的错误情况下,我想从整个函数返回值,f但我不知道如何从闭包中做到这一点。

如果我改为使用match表达式,它可以正常工作,如下所示:

fn f() -> i32 {
    let a = match some_result {
        Ok(result) => result,
        Err(_)     => { return 1; },
    };
}

然而,这使得代码冗长,因为我有一个微不足道的Ok匹配臂。

标签: rustreturnclosures

解决方案


不,那里没有。

闭包是底层的一种方法(一种函数)。您要求能够从任意深度嵌套的函数调用中退出父函数。这种非本地流控制通常被证明对程序员的理智和程序维护极为不利。


要解决您的问题:


推荐阅读