Der*_*ric 2 pattern-matching rust
我有一个用 Rust 编写的状态机,它需要对两个状态执行相同的操作。
这两种状态都是枚举的变体,但包含不同数量的元素。
match self.state {
RunState::ACCUMULATE(byte, count) | RunState::ESCAPE(count) => todo!(),
_ => todo!()
}
Run Code Online (Sandbox Code Playgroud)
该示例是无效的源代码,因为byte未绑定在所有模式中。
这可以通过byte在第二个模式中绑定到文字零来解决,但我不知道如何存档。
我目前正在分别匹配这两种模式,这会导致我想避免的代码重复。
感谢您的关注。
模式旨在通过结构进行匹配,并根据匹配的值绑定变量。它并不是为了引入任意绑定而设计的。match如果您担心重复,您应该使用单独的手臂,也许还可以使用辅助函数:
match self.state {
RunState::ACCUMULATE(byte, count) => helper(byte, count),
RunState::ESCAPE(count) => helper(0, count),
...
}
Run Code Online (Sandbox Code Playgroud)
enum或者您可以为您引入一个返回所需值的函数,例如:
impl RunState {
fn to_parts(&self) -> (u8, usize) { // or Option<(u8, usize)> if its not applicable to all
match self.state {
RunState::ACCUMULATE(byte, count) => (byte, count),
RunState::ESCAPE(count) => (0, count),
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1339 次 |
| 最近记录: |