Rust中支持模式匹配的位置:
- let声明
- 函数和闭包参数
- match表达式
- if let表达式
- while let 表达式
- for 表达式
let 声明
fn main() {
let (a, b) = (1, 2);
let Point { x, y } = Point { x: 1, y: 2 };
assert_eq!(1, a);
assert_eq!(2, b);
assert_eq!(1, x);
assert_eq!(2, y);
}
struct Point {
x: i32,
y: i32,
}
函数和闭包的参数位置 ref 模式
fn main() {
let s = sum("1".to_string(), "2".to_string());
assert_eq!(s, "12".to_string());
}
fn sum(x: String, ref y: String) -> String {
x + y
}
ref 就是引用模式 借用的意思
fn main() {
let a = 42;
let ref b = a;
let c = &a;
assert_eq!(b, c);
let mut a = [1, 2, 3];
let ref mut b = a;
b[0] = 0;
assert_eq!(a, [0, 2, 3]);
}
match表达式
fn check_optional(opt: Option<i32>) {
match opt {
Some(p) => println!("has value {}", p),
None => println!("has no value"),
}
}
fn handle_result(res: i32) -> Result<i32, dyn Error> {
do_someting(res)?;
//?等价于下面
match do_someting(res) {
ok(0) => Ok(o),
Err(e) => SomeError(e),
}
}
if let
fn main() {
let x = &Some(3);
if let Some(y) = x { //进行相互转换
println!("1");
y;
}
}