Closures en tant que paramètres de fonction

RustRustBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous allez apprendre comment les fonctions peuvent prendre des closures comme paramètres, permettant à toute fonction qui satisfait la contrainte de trait de la closure d'être utilisée comme argument. Les traits Fn, FnMut et FnOnce déterminent la manière dont une closure capture les variables du scope entourant.

Note : Si le laboratoire ne spécifie pas de nom de fichier, vous pouvez utiliser n'importe quel nom de fichier que vous voulez. Par exemple, vous pouvez utiliser main.rs, le compiler et l'exécuter avec rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99326{{"Closures en tant que paramètres de fonction"}} rust/function_syntax -.-> lab-99326{{"Closures en tant que paramètres de fonction"}} rust/expressions_statements -.-> lab-99326{{"Closures en tant que paramètres de fonction"}} rust/lifetime_specifiers -.-> lab-99326{{"Closures en tant que paramètres de fonction"}} rust/operator_overloading -.-> lab-99326{{"Closures en tant que paramètres de fonction"}} end

Fonctions d'entrée

Puisque les closures peuvent être utilisées comme arguments, vous vous demandez peut-être si c'est également le cas pour les fonctions. Et en effet, c'est possible! Si vous déclarez une fonction qui prend une closure comme paramètre, alors n'importe quelle fonction qui satisfait la contrainte de trait de cette closure peut être passée en tant que paramètre.

// Définissez une fonction qui prend un argument générique `F`
// limité par `Fn`, et l'appelez
fn call_me<F: Fn()>(f: F) {
    f();
}

// Définissez une fonction wrapper satisfaisant la contrainte `Fn`
fn function() {
    println!("Je suis une fonction!");
}

fn main() {
    // Définissez une closure satisfaisant la contrainte `Fn`
    let closure = || println!("Je suis une closure!");

    call_me(closure);
    call_me(function);
}

Pour information supplémentaire, les traits Fn, FnMut et FnOnce déterminent la manière dont une closure capture les variables du scope entourant.

Sommaire

Félicitations! Vous avez terminé le laboratoire Fonctions d'entrée. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.