有没有办法从闭包内部从函数返回?
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@
的东西以上是关于有没有办法从闭包内部从函数返回?的主要内容,如果未能解决你的问题,请参考以下文章