- 01Setting up (what you'll need)
- 02Your first output (println!)
- 03Variables and mutability (let / mut)
- 04Type annotations and basic types
- 05Branching (the if statement)
- 06Repeating (the for loop)
- 07Writing your own function
- 08Repeating (while and loop)
- 09Ownership, the basics
- 10Borrowing (references, &)
- 11Working with vectors (Vec)
- 12Structs
- 13enum and the match expression
- 14The Option type (null safety)
- 15The Result type and error handling
- 16Traits
- 17Generics
- 18Closures
- 19Working with strings (String)
- 20[Project] Build a small inventory system
Closures
This lesson covers the closure, an anonymous function you can assign to a variable.
A closure is written |args| { body } and can be defined on the spot. What makes it distinctive is that it can capture the variables around it.
The sample code creates the closure let add_tax = |price: i32| price + (price / 10); and uses it to add sales tax to several product prices.
A common early stumble is choosing between an ordinary function (fn) and a closure. A closure has the flexibility of capturing surrounding variables, and is the usual choice for handing a short piece of logic to a higher-order function such as map or filter.
In professional work, closures come up constantly alongside collection methods such as map, filter, and for_each.
๐งช This site can't compile or run Rust directly, so it checks on the spot whether what you typed matches the reference code (scoring happens entirely in your browser โ nothing is sent anywhere).
