我可以在 Rust 中命名一个模式吗?
Can I name a pattern in Rust?
我正在使用 winit to create a window and get input from the user through the window. The window creates variants of the enum Event
并将其传递给 "callback function"(我不确定这有多准确)进行处理。
我正在使用匹配语句来决定如何处理事件:
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
}
}
这可能吗?如果我们也可以以 "or" 的方式为模式组合添加别名,那就更好了。
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,
}
}
我正在使用 winit to create a window and get input from the user through the window. The window creates variants of the enum Event
并将其传递给 "callback function"(我不确定这有多准确)进行处理。
我正在使用匹配语句来决定如何处理事件:
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
}
}
这可能吗?如果我们也可以以 "or" 的方式为模式组合添加别名,那就更好了。
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,
}
}