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
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 numberlet add_ten = |x: i32| -> i32 { x + 10 };// Closure with multiple parameterslet sum = |a: i32, b: i32| a + b;// Using closures with iteratorslet numbers = vec![1, 2, 3, 4, 5];let doubled: Vec<i32> = numbers.iter().map(|n| n * 2).collect();// Closure capturing environmentlet factor = 3;let scaled: Vec<i32> = numbers.iter().map(|n| n * factor).collect();// Using filter with closurelet 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