代码之家  ›  专栏  ›  技术社区  ›  stimulate

我能说出锈迹斑斑的图案吗?[副本]

  •  -1
  • stimulate  · 技术社区  · 7 年前

    我正在使用 winit 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
        }
    }
    

    这可能吗?如果我们也能以“或”的方式对模式的组合进行别名,那就更好了。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Matthieu M.    7 年前

    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,
        }
    }
    
    推荐文章