Closures
Avancélet ajouter = |a, b| a + b;
let mut compteur = 0;
let mut incrementer = || compteur += 1; // capture par référence mutable
incrementer();
// move : la closure prend la propriété des variables capturées
let nom = String::from("Alice");
let salutation = move || println!("Salut {nom}");
// Trois traits de closures
// Fn : lit seulement (appelable plusieurs fois)
// FnMut : modifie son environnement
// FnOnce : consomme son environnement (appelable une fois)
fn appliquer<F: Fn(i32) -> i32>(f: F, x: i32) -> i32 { f(x) }
fn boxee() -> Box<dyn Fn(i32) -> i32> { Box::new(|x| x + 1) }