@@ -62,3 +62,50 @@ fn main() {
6262 println!("Done!")
6363}
6464```
65+
66+ Matching: [ link] ( https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=cd4da27c5fb79ad3405f07131d60d275 ) .
67+
68+ ```
69+ #![allow(unused_variables)]
70+
71+ fn print_string(s: &Option<String>) {
72+ match s {
73+ Some(s) => println!("Some string: {s}"),
74+ None => println!("No string!")
75+ }
76+ }
77+
78+ fn main() {
79+ // Basic matching.
80+ let mut maybe_string = Some("foo".to_string());
81+ println!("{:?}", maybe_string);
82+ print_string(&maybe_string);
83+
84+ maybe_string = None;
85+ println!("{:?}", maybe_string);
86+ print_string(&maybe_string);
87+
88+ // Matching with destructuring.
89+ let mut magic = (Some("foo".to_string()), Some("bar".to_string()));
90+ println!("{:?}", magic);
91+
92+ // Use a closure ("lambda") as an example.
93+ // Note: explain need to annotate the type.
94+ // Note: explain can use a simple construct of `&_`, hehe.
95+ let print_magic = |arg: &(Option<String>, Option<String>)| {
96+ // println!("Arg: {:?}", &arg);
97+ match arg {
98+ (Some(s1), Some(s2)) => println!("Both: ({s1}, {s2})."),
99+ (None, Some(s2)) => println!("Second: (Zilch, {s2})."),
100+ _ => println!("Something else, too lazy to type.")
101+ }
102+ };
103+ print_magic(&magic); // Note: try removing the `&`.
104+
105+ magic.0 = None;
106+ print_magic(&magic);
107+
108+ magic.0 = Some("hehe".to_string());
109+ print_magic(&magic);
110+ }
111+ ```
0 commit comments