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;}}
