capypad
0 day streak
rust / beginner
Snippet

Closures: Anonymous Functions in Rust

Closures are anonymous functions that can capture their environment. They are defined with |params| expression syntax. Rust infers types when possible. Closures are commonly used with iterators (map, filter) and can capture variables from their surrounding scope.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
fn main() {
// Closure that adds 10 to a number
let add_ten = |x: i32| -> i32 { x + 10 };
// Closure with multiple parameters
let sum = |a: i32, b: i32| a + b;
// Using closures with iterators
let numbers = vec![1, 2, 3, 4, 5];
let doubled: Vec<i32> = numbers.iter().map(|n| n * 2).collect();
// Closure capturing environment
let factor = 3;
let scaled: Vec<i32> = numbers.iter().map(|n| n * factor).collect();
// Using filter with closure
let evens: Vec<i32> = numbers.into_iter().filter(|n| n % 2 == 0).collect();
println!("Add ten: {}", add_ten(5));
println!("Sum: {}", sum(3, 4));
println!("Doubled: {:?}", doubled);
println!("Scaled by {}: {:?}", factor, scaled);
println!("Evens: {:?}", evens);
}
Breakdown
1
let add_ten = |x: i32| -> i32 { x + 10 };
Closure with explicit type annotations, returns x + 10
2
let sum = |a: i32, b: i32| a + b;
Closure with implicit return (last expression is return value)
3
.map(|n| n * 2)
Iterator method that applies closure to each element
4
let factor = 3; let scaled: Vec<i32> = ... |n| n * factor
Closure capturing 'factor' from the environment (borrow)
5
.filter(|n| n % 2 == 0)
Iterator method that keeps only elements where closure returns true