Match over optional values
You’ve got a String?. Before you can use the string inside, you have to handle both possibilities — present and absent. match does exactly that:
The None arm covers absence. The other arm is a plain name, value — it catches everything else (here, the present case) and binds it. Since a present String? has no Some wrapper, there’s nothing to peel off: value is just the String, ready to use.
Swap None in for "Ada" above and the same match returns "no name given" instead. Both cases handled, and no way to slip up and use a value that might be absent — the compiler holds you to it.
This is the match you met on scalars, now doing real work: None versus the value behind it. Matching over your own multi-case types comes later, once you’ve built some.