Exception 如何从调用堆栈中的多个层返回?

Exception 如何从调用堆栈中的多个层返回?,exception,rust,exit,Exception,Rust,Exit,假设我们有一个游戏循环,沿着这个Python伪代码 def handle_事件(): 对于get_frame_events()中的e: 如果e.type==CloseEvent: 提升成功退出() def gameloop(): 尽管如此: 处理事件() handle_物理学() render() def main(): try:gameloop() 除非成功退出:返回 在展开堆栈并调用所有析构函数时,我们可以从handle_events退出程序。如果到handle\u events的调用堆栈

假设我们有一个游戏循环,沿着这个Python伪代码

def handle_事件():
对于get_frame_events()中的e:
如果e.type==CloseEvent:
提升成功退出()
def gameloop():
尽管如此:
处理事件()
handle_物理学()
render()
def main():
try:gameloop()
除非成功退出:返回
在展开堆栈并调用所有析构函数时,我们可以从
handle_events
退出程序。如果到
handle\u events
的调用堆栈更深,则返回一个布尔值来指示程序是否应该一直退出到
main


我知道
process::exit
,但它相当苛刻,不调用析构函数,而是立即退出。是否可以在Rust中执行上述代码中的操作?

返回一个错误并匹配主函数中的错误:

#[derive(Debug)]
enum Error {
    SuccessfulExit,
}

fn handle_events() -> Result<(), Error> {
    // for e in get_frame_events() {
        // if e.kind == CloseEvent {
            return Err(Error::SuccessfulExit);
        // }
    // }

    // Ok(())
}

fn gameloop() -> Result<(), Error> {
    loop {
        handle_events()?;
        // handle_physics();
        // render();
    }
}

fn main() {
    match gameloop() {
        Ok(()) | Err(Error::SuccessfulExit) => return,
        Err(e) => eprintln!("Error: {:?}", e),
    }
}
#[派生(调试)]
枚举错误{
成功退出,,
}
fn handle_events()->结果{
//对于get_frame_events()中的e{
//如果e.kind==CloseEvent{
返回Err(Error::SuccessfulExit);
// }
// }
//好(())
}
fn gameloop()->结果{
环路{
处理事件()?;
//handle_physics();
//render();
}
}
fn main(){
匹配gameloop(){
Ok(())| Err(Error::SuccessfulExit)=>return,
Err(e)=>eprintln!(“错误:{:?}”,e),
}
}


从技术上讲,你也可能会引起恐慌,然后抓住它,但这是一个糟糕的想法。

可能会有所帮助。首先,这是一个糟糕的设计place@Stargateur请告诉我怎样才能做得更好我明白,但在我的实际应用程序中,
handle_events
将在5个嵌套调用内执行,并且仅在这一个情况下到处返回结果似乎很乏味。