gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:35:58 25 4
gpt4 key购买 nike

假设我们有一个游戏循环,遵循此Python伪代码的思路

def handle_events():
for e in get_frame_events():
if e.type == CloseEvent:
raise SuccessfulExit()

def gameloop():
while True:
handle_events()
handle_physics()
render()

def main():
try: gameloop()
except SuccessfulExit: return

我们可以从 handle_events退出程序,同时展开堆栈并调用所有析构函数。如果对 handle_events的调用堆栈更深,则返回一个 bool 值表示程序是否应一直退出直到 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),
}
}

从技术上讲,您还可能引起 panic ,然后 catch 它,但这是一个糟糕的主意。

关于exception - 如何从调用堆栈中的多个层返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59645711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com