【问题标题】:Is there any way to return from a function from inside a closure?有没有办法从闭包内部从函数返回?
【发布时间】:2019-02-01 07:15:41
【问题描述】:

我有以下简化代码:

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

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

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

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

但是,这会使代码变得冗长,因为我有琐碎的 Ok 匹配臂。

【问题讨论】:

  • 你可以走了,.unwrap_or(1)

标签: rust return closures


【解决方案1】:

不,没有。

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


解决您的问题:

【讨论】:

  • 这是有道理的。我只是希望在闭包参数的情况下有类似于 Kotlin 的 return@ 的东西
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 2019-07-06
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
相关资源
最近更新 更多