Iterator + Closure Patterns
Closures power iterator adapters for expressive, lazy data pipelines.
Busca en todas las páginas de la documentación
Closures power iterator adapters for expressive, lazy data pipelines.
fn active_names(users: &[(&str, bool)]) -> Vec<String> {
users.iter()
.filter(|(_, active)| *active)
.map(|(name, _)| name.to_uppercase())
.collect()
}When to reach for this: Transforming collections without intermediate mutation.
#[derive(Debug)]
struct Order { total: u32, vip: bool }
fn discount_summary(orders: &[Order]) -> (u32, u32) {
let vip_total: u32 = orders.iter()
.filter(|o| o.vip)
.map(|o| o.total)
.sum();
let regular: u32 = orders.iter()
.filter(|o| !o.vip)
.map(|o| o.total / 2)
.sum();
(vip_total, regular)
}What this demonstrates:
filter/mapPrefer filter_map over filter+map. Use fold for single-pass aggregation. then (1.51+) chains Option steps.
|s| s.clone(). Fix: Use references earlier.Fn not FnMut - sync only.| Alternative | Use When | Don't Use When |
|---|---|---|
for loop | Complex break/continue | Straight pipeline |
| SQL/query engine | Large data | In-memory small vec |
rayon | CPU parallel | I/O bound |
Stack versions: This page was written for Rust 1.97.0 (edition 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, and Polars 0.46+.
Revisado por Chris St. John·Última actualización: 16 jul 2026