我正在使用 winit Event 并将其传递给“回调函数”(我不确定这是否准确)进行处理。
Event
我使用匹配语句来决定如何处理事件:
fn process_event(event: winit::Event) -> winit::ControlFlow /*potentially break EventsLoop and exit*/ { match event { winit::Event::WindowEvent { // match against close request event event: winit::WindowEvent::CloseRequested, .. } => winit::ControlFlow::Break, _ => winit::ControlFlow::Continue } }
然而,这很快变得非常嘈杂。我目前正在将所有不同的案例分解为函数,以便使代码更具表达力,但最终,模式仍然如此冗长。如果我能给出一个模式来匹配一个名称,那就太好了,我的意思是这样的:
pattern quitEvent = winit::Event::WindowEvent { event: winit::WindowEvent::CloseRequested, .. }; fn process_event(event: winit::Event) -> winit::ControlFlow { match event { quitEvent => winit::ControlFlow::Break, _ => winit::ControlFlow::Continue } }
这可能吗?如果我们也能以“或”的方式对模式的组合进行别名,那就更好了。
Rust(1.31)中的图案没有别名。
不过,有一些保护子句,它们可以调用函数:
match event { n if is_quit_event(n) => winit::ControlFlow::Break, _ => winit::ControlFlow::Continue, }
因此是可能的,当然,在函数中,您可以进行任何计算。
这里的功能是:
fn is_quit_event(event: winit::Event) -> bool { match event { winit::Event::WindowEvent { // match against close request event event: winit::WindowEvent::CloseRequested, .. } => true, _ => false, } }