Rust 模式匹配
模式匹配是一种结构性的解构。类似这样:
struct Point {
x: i32,
y: i32,
}
fn main() {
let p = Point { x: 0, y: 7 };
let Point { x: a, y: b } = p;
assert_eq!(0, a);
assert_eq!(7, b);
}
这里的 Point { x: a, y: b }
就是模式匹配。
Refutable vs irrefutable
当一个模式有可能不与它所匹配的值匹配时,我们就说该模式是可反驳的。另一方面,无可辩驳的模式总是与它们所匹配的值相匹配。例如:
let (x, y) = (1, 2); // irrefutable pattern
if let (a, 3) = (1, 2) { // refutable pattern
panic!("Shouldn't reach here");
} else if let (a, 4) = (3, 4) {
println!("Matched ({}, 4)", a);
}