Exception 如何从调用堆栈中的多个层返回?
假设我们有一个游戏循环,沿着这个Python伪代码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的调用堆栈
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个嵌套调用内执行,并且仅在这一个情况下到处返回结果似乎很乏味。