1、模式是Rust中特殊的語法,模式用來匹配值的結構。
2、模式由如下內容組成:
(1)字面值
(2)解構的數組、枚舉、結構體或者元組
(3)變量
(4)通配符
(5)佔位符
例子:
// 1、match
// match VALUE {
// PATTERN => EXPRESSION,
// PATTERN => EXPRESSION,
// PATTERN => EXPRESSION,
// }
// 必須匹配完所有的情況
// fn main() {
// let a = 1;
// match a {
// 0 => println!("Zero"),
// 1 => println!("One"),
// _ => println!("other"),
// };
// println!("Hello, world!");
// }
// if let
// fn main() {
// let color: Option<&str> = None;
// let is_ok = true;
// let age: Result<u8, _> = "33".parse();
// if let Some(c) = color {
// println!("color: {}", c);
// } else if is_ok {
// println!("is ok");
// } else if let Ok(a) = age {
// if a > 30 {
// println!("oh, mature man");
// } else {
// println!("oh, young man");
// }
// } else {
// println!("in else");
// }
// }
// while let
// 只要模式匹配就一直執行while循環
// fn main() {
// let mut stack = Vec::new();
// stack.push(1);
// stack.push(2);
// stack.push(3);
//
// while let Some(top) = stack.pop() {
// println!("top = {}", top);
// } // 只要匹配Some(value),就會一直循環
// }
// for
// // 在for循環中,模式是直接跟隨for關鍵字的值,例如 for x in y,x就是對應的模式
// fn main() {
// let v = vec!['a', 'b', 'c'];
// for (index, value) in v.iter().enumerate() {
// println!("index: {}, value: {}", index, value);
// }
// }
// 此處的模式是(index, value)
// let
// let PATTERN = EXPRESSION
// fn main() {
// let (x, y, z) = (1, 2, 3); // (1, 2, 3)會匹配(x, y, z),將1綁定到x,2綁定到y,3綁定到z
// println!("{}, {}, {}", x, y, z);
//
// let (x, .., z) = (1, 2, 3);
// println!("{}, {}", x, z);
// }
// 函數
// 函數的參數也是模式
fn print_point(&(x, y): &(i32, i32)) {
println!("x: {}, y: {}", x, y);
}
fn main() {
let p = (3, 5);
print_point(&p);
}
// &(3, 5) 匹配模式 &(x, y)
// 模式在使用它的地方並不都是相同的,模式存在不可反駁的和可反駁的
本節全部源代碼:
https://github.com/anonymousGiga/learn_rust/blob/master/learn_pattern/src/main.rs