Sujets Rust importants

Rust Closures

Functions without a name that remember the variables around them.

  • Avancé
  • 3 min de lecture
  • 1 exemple exécutable
Ce que vous allez apprendre
  • |n| n * 2
  • Capturing variables
  • move and returning closures
Closure → result
|n| n * 2apply(21) → 42
|n| n + bonusapply(5) → 15
make_adder(5)add_five(1) → 6

A function that captures its surroundings

A closure is a function without a name that you can store in a variable or pass to another function. Unlike a normal function, it can use variables from the place where it was created.

|n| n * 2 is a closure with one parameter. add_bonus reads bonus from the surrounding code. move makes the closure own what it captures, which is needed when the closure is returned from make_adder. increment changes counter, so it must be declared mut.

Points clés

  1. A closure can use variables from where it was created.
  2. move makes it own what it captures.
  3. A closure that changes a variable must be mut.

Exemple Rust exécutable

Rust
Exécuter le code →
main.rs
fn apply(value: i32, operation: impl Fn(i32) -> i32) -> i32 {
    operation(value)
}

fn make_adder(amount: i32) -> impl Fn(i32) -> i32 {
    move |value| value + amount
}

fn main() {
    let double = |n| n * 2;
    println!("{}", apply(21, double));

    let bonus = 10;
    let add_bonus = |n| n + bonus; // captures bonus from the environment
    println!("{}", apply(5, add_bonus));

    let add_five = make_adder(5);
    println!("{}", add_five(1));

    let mut counter = 0;
    let mut increment = || counter += 1;
    increment();
    increment();
    println!("counter = {counter}");
}
Obtenir un bouton Run pour cet exemple Résultat de l'exécution
42
15
6
counter = 2

S'entraîner

Ouvrez l'exemple dans le compilateur en ligne, modifiez une valeur ou ajoutez une ligne, et devinez la sortie avant de l'exécuter. Cassez ensuite le code exprès et lisez le message du compilateur.

Leçon terminée ?

Marquez-la comme apprise pour suivre votre progression.

S'entraîner avec un défi

Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.

Tous les défis