Skip to content

Commit 5794333

Browse files
authored
Matching in stream-2025-04-16.md.
1 parent 66d30b3 commit 5794333

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

stream-2025-04-16.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)