From 2fadb006603139c335ed8df8fa9c25402986c4fd Mon Sep 17 00:00:00 2001 From: Adam Carpenter <53hornet@gmail.com> Date: Thu, 21 Mar 2019 13:20:03 -0400 Subject: Finished patterns. --- patterns/src/main.rs | 329 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 311 insertions(+), 18 deletions(-) diff --git a/patterns/src/main.rs b/patterns/src/main.rs index c4d9d65..4ee101d 100644 --- a/patterns/src/main.rs +++ b/patterns/src/main.rs @@ -1,23 +1,316 @@ fn main() { - let favorite_color: Option<&str> = None; - let is_tuesday = false; - let age: Result = "34".parse(); +// let favorite_color: Option<&str> = None; +// let is_tuesday = false; +// let age: Result = "34".parse(); +// +// if let Some(color) = favorite_color { +// dbg!(color); +// } +// else if is_tuesday { +// dbg!("green"); +// } +// else if let Ok(age) = age { +// if age > 30 { +// dbg!("purple"); +// } +// else { +// dbg!("orange"); +// } +// } +// else { +// dbg!("blue"); +// } - if let Some(color) = favorite_color { - dbg!(color); - } - else if is_tuesday { - dbg!("green"); - } - else if let Ok(age) = age { - if age > 30 { - dbg!("purple"); - } - else { - dbg!("orange"); - } + +// let mut stack = Vec::new(); +// +// stack.push(1); +// stack.push(2); +// stack.push(3); +// +// while let Some(top) = stack.pop() { +// dbg!(top); +// } + + +// let v = vec!['a', 'b', 'c']; +// +// for (_, value) in v.iter().enumerate() { +// //println!("{} is at index {}", value, index); +// dbg!(value); +// } + + +// let (..) = (1, 2, 3); + + +// let point = (3, 5); +// print_coords(&point); + + +// let Some(x) = Some(5); +// if let Some(x) = Some(5) { +// dbg!(x); +// } +// if let x = 5 { +// dbg!(x); +// }; + + +// let x = 1; +// +// match x { +// 1 => dbg!("one"), +// 2 => dbg!("two"), +// 3 => dbg!("three"), +// _ => dbg!("else"), +// }; + + + +// let x = Some(5); +// let y = 10; +// +// match x { +// Some(50) => println!("got 50"), +// Some(y) => println!("matched, y == {:?}", y), +// _ => println!("default: x == {:?}", x), +// } +// +// println!("end: x == {:?}, y == {:?}", x, y); + + +// let x = 5; +// +// match x { +// 1 ... 5 => println!("one through five"), +// _ => println!("else"), +// } + + +// let x = 'w'; +// +// match x { +// 'a' ... 'j' => println!("early ascii char"), +// 'k' ... 'z' => println!("late ascii char"), +// _ => println!("else"), +// } + + + +// let p = Point { x: 0, y: 7 }; +// //let Point { x: a, y: b } = p; +// let Point { x, y } = p; +// assert_eq!(0, x); +// assert_eq!(7, y); + + +// let p = Point { x: 1, y: 0 }; +// +// match p { +// Point { x, y: 0 } => dbg!("x-axis"), +// Point { x: 0, y } => dbg!("y-axis"), +// Point { x, y } => dbg!("neither"), +// }; + + +// //let msg = Message::ChangeColor(0, 160, 255); +// //let msg = Message::Write(String::from("hi there")); +// //let msg = Message::Move { +// // x: 1, +// // y: 2, +// //}; +// let msg = Message::ChangeColor(Color::Hsv(0, 160, 255)); +// +// match msg { +// Message::Quit => { +// println!("the quit variant has no data to destructure.") +// }, +// Message::Move { x, y } => { +// println!( +// "Move in the direction {}, {}", +// x, +// y +// ); +// } +// Message::Write(text) => println!("text message: {}", text), +// Message::ChangeColor(Color::Rgb(r, g, b)) => { +// println!( +// "Change the color to RGB {}{}{}", +// r, +// g, +// b +// ) +// } +// Message::ChangeColor(Color::Hsv(h, s, v)) => { +// println!( +// "Change the color to HSV {}{}{}", +// h, +// s, +// v +// ) +// } +// } + + +// let points = vec![ +// Point { x: 0, y: 0 }, +// Point { x: 1, y: 5 }, +// Point { x: 10, y: -3 }, +// ]; +// +// let sum_of_squares: i32 = points +// .iter() +// .map(|&Point { x, y } | x * x + y * y) +// .sum(); +// dbg!(sum_of_squares); +// +// +// let ((feet, inches), Point { x, y }) = ((3, 10), Point { x: 3, y: -10 }); + + +// foo(3, 4); + + +// let mut setting_value = Some(5); +// //let new_setting_value = Some(10); +// let new_setting_value = None; +// +// match (setting_value, new_setting_value) { +// (Some(_), Some(_)) => { +// println!("can't overwrite existing customized value."); +// } +// _ => { +// setting_value = new_setting_value; +// } +// } +// +// println!("setting is {:?}", setting_value); +// +// +// let numbers = (2, 4, 8, 16, 32); +// +// match numbers { +// (first, _, third, _, fifth) => { +// println!("numbers: {}, {}, {}", first, third, fifth) +// }, +// } +// +// +// let _x = 5; +// let _y = 10; +// +// +// let s = Some(String::from("hello")); +// +// if let Some(_) = s { +// println!("found a string"); +// } +// +// println!("{:?}", s); + + +// let origin = Point { x: 1, y: 2, z: 3 }; +// +// match origin { +// Point {x, .. } => dbg!(x), +// }; +// +// let numbers = (2, 4, 8, 16, 32); +// +// match numbers { +// (first, .., last) => { +// dbg!(first); +// dbg!(last); +// }, +// } + + +// let num = Some(4); +// +// let test = match num { +// Some(x) if x < 5 => println!("{}", x), +// Some(x) => println!("{}", x), +// None => (), +// }; + + +// let x = Some(10); +// let y = 10; +// +// match x { +// Some(50) => println!("got 50"), +// Some(n) if n == y => println!("{:?}", n), +// _ => println!("{:?}", x), +// } +// +// println!("{:?} {:?}", x, y); + + +// let x = 4; +// let y = false; +// +// match x { +// 4 | 5 | 6 if y => println!("yes"), +// _ => println!("no"), +// } + + + enum Message { + Hello { id: i32 }, } - else { - dbg!("blue"); + + let msg = Message::Hello { id: 13 }; + + match msg { + Message::Hello { id: id_variable @ 3...7 } => { + println!("{}", id_variable) + }, + Message::Hello { id: 10...12 } => { + println!("another range") + }, + Message::Hello { id } => { + println!("else") + }, } + + + println!("Done."); } + + +//struct Point { +// x: i32, +// y: i32, +// z: i32, +//} + + +//fn foo(_: i32, y: i32) { +// println!("this code only uses y: {}", y); +//} + + +//fn print_coords(&(x, y): &(i32, i32)) { +// println!("{}, {}", x, y); +//} + + +//struct Point { +// x: i32, +// y: i32, +//} + + +//enum Message { +// Quit, +// Move { x: i32, y: i32 }, +// Write(String), +// ChangeColor(Color), +//} +// +// +//enum Color { +// Rgb(i32, i32, i32), +// Hsv(i32, i32, i32) +//} -- cgit v1.2.3