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

Posted

技术标签:

【中文标题】有没有办法从闭包内部从函数返回?【英文标题】: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) 【参考方案1】:

不,没有。

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


解决您的问题:

How do you unwrap a Result on Ok or return from the function on Err?

【讨论】:

这是有道理的。我只是希望在闭包参数的情况下有类似于 Kotlin 的 return@ 的东西

以上是关于有没有办法从闭包内部从函数返回?的主要内容,如果未能解决你的问题,请参考以下文章

python之闭包,装饰器

如何从 Swift 中的 void 闭包中返回一个值?

如何从 Swift 3 中的闭包中返回

网络编程-Python高级语法-闭包

go 匿名函数和闭包

js闭包是啥?