Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.5k views
in Technique[技术] by (71.8m points)

rust - Is there any way to return from a function from inside a closure?

I have the following simplified code:

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

I want to return the value 1 from the whole function f in this specific error case but I can't figure out how to do it from within a closure.

If I instead use a match expression, it works fine as follows:

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

However, this makes the code verbose since I have the trivial Ok match arm.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

No, there is not.

A closure is a method (a kind of function) under the hood. You are asking for the ability to exit a parent function from an arbitrarily deeply nested function call. Such non-local flow control has generally proven to be extremely bad for programmer sanity and program maintenance.


To solve your problem:


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...