Rust 我能说出锈迹斑斑的图案吗?

Rust 我能说出锈迹斑斑的图案吗?,rust,pattern-matching,aliases,Rust,Pattern Matching,Aliases,我正在使用创建一个窗口,并通过该窗口获取用户的输入。该窗口创建枚举的变体,并将其传递给“回调函数”(我不确定这是否准确)进行处理 我使用匹配语句来决定如何处理事件: fn process_event(event: winit::Event) -> winit::ControlFlow /*potentially break EventsLoop and exit*/ { match event { winit::Event::WindowEvent { // mat

我正在使用创建一个窗口,并通过该窗口获取用户的输入。该窗口创建枚举的变体,并将其传递给“回调函数”(我不确定这是否准确)进行处理

我使用匹配语句来决定如何处理事件:

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,
    }
}

不打算过度优化,只是想知道这是否因为函数调用而不是内联模式而效率较低或更难优化。它确实需要和额外的match语句,并引入一个布尔值和一个函数调用。@stimulate:嗯,首先,是的,它在调试时会比较慢。释放时,将取决于防护装置是否内联;使用内联应该没有性能差异。。。关键词是“应该”,因为优化器可能很挑剔。