有没有办法从闭包内部的函数返回?

ssh*_*124 7 closures return rust

我有以下简化代码:

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

我想在这个特定的错误情况下1从整个函数返回值,f但我无法弄清楚如何在闭包内执行它.

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

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

然而,这使得代码冗长,因为我有琐碎的Ok匹配臂.

She*_*ter 10

不,那里没有.

封闭是引擎盖下的一种方法(一种功能).您要求能够从任意深度嵌套的函数调用中退出父函数.这种非本地流量控制通常被证明对程序员的理智和程序维护非常不利.


要解决您的问题:

  • 这就说得通了。我只是希望在闭包参数的情况下有类似于 Kotlin 的 `return@` 的东西 (3认同)