Closures avec paramètres
Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 61 sur 66.
Bien que les closures qui ne prennent aucun paramètre soient utiles, la plupart du temps, vous voudrez passer des données à vos closures pour les rendre plus flexibles et puissantes. L'ajout de paramètres aux closures suit le même modèle que celui que vous avez appris précédemment, mais avec des valeurs à l'intérieur des barres verticales.
Voici comment définir une closure qui accepte un paramètre :
let add_one = |x: i32| x + 1;Remarquez que le paramètre x se place entre les barres verticales, tout comme les paramètres de fonction. Vous pouvez ensuite appeler cette fermeture en passant une valeur :
let add_one = |x: i32| x + 1;
let result = add_one(5); // le résultat est 6Pour les fermetures (closures) avec plusieurs paramètres, séparez-les par des virgules :
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // le résultat est 12Défi
FacileVous recevrez deux entrées. La première entrée est un nombre, et la seconde entrée est également un nombre. Créez une closure qui prend deux paramètres et calcule la puissance (le premier paramètre élevé à la puissance du second paramètre). Stockez la closure dans une variable, appelez-la avec les valeurs d'entrée et affichez le résultat.
Exigences :
- Lire la première entrée (nombre de base) et supprimer les espaces blancs
- La convertir en
i32 - Lire la seconde entrée (exposant) et supprimer les espaces blancs
- La convertir en
u32 - Créer une closure avec deux paramètres qui calcule la puissance en utilisant la méthode
.pow() - Stocker la closure dans une variable
- Appeler la closure avec les deux valeurs d'entrée
- Afficher le résultat
Entrée :
- Première ligne : Un nombre de base (par exemple,
2) - Deuxième ligne : Un exposant (par exemple,
3)
Sortie :
- Le résultat du calcul de la puissance
Aide-mémoire
Les fermetures (closures) peuvent accepter des paramètres en les plaçant entre les barres verticales || :
let add_one = |x: i32| x + 1;
let result = add_one(5); // le résultat est 6Pour plusieurs paramètres, séparez-les par des virgules :
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // le résultat est 12Essayez vous-même
use std::io;
fn main() {
// Lire la première entrée (nombre de base)
let mut base_input = String::new();
io::stdin().read_line(&mut base_input).expect("Failed to read line");
let base: i32 = base_input.trim().parse().expect("Invalid number");
// Lire la deuxième entrée (exposant)
let mut exp_input = String::new();
io::stdin().read_line(&mut exp_input).expect("Failed to read line");
let exponent: u32 = exp_input.trim().parse().expect("Invalid number");
// TODO: Créer une closure qui calcule la puissance et la stocker dans une variable
// TODO: Appeler la closure avec la base et l'exposant
// Afficher le résultat
println!("{}", result);
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Structures de contrôle avancées
L'expression 'match'Filtrage de plusieurs valeursFiltrage d'intervallesL'expression 'if let'Les boucles en tant qu'expressionsRécapitulatif - Analyseur de commandes simple4Regrouper des données avec les structures
Qu'est-ce qu'une structure ?Aperçu des structuresAccéder aux champs d'une structureStructures mutablesLes structures comme paramètres de fonctionStructures tupleRécapitulatif - Créer une structure Book7Gestion des erreurs avec 'Result'
Qu'est-ce qu'un 'Result' ?Utiliser 'match' avec 'Result'is_ok() et is_err()Raccourcis : unwrap et expectL'opérateur point d'interrogation '?'Analyse de chaînes en nombresRécapitulatif - Fonction de division sécurisée10Closures & Fonctions anonymes
Qu'est-ce qu'une closure ?Définir une closure simpleClosures avec paramètresCapturer l'environnementRécapitulatif - Closure d'addition simple2Introduction aux vecteurs
Qu'est-ce qu'un vecteur ?Créer un vecteurAjouter des éléments avec pushAccéder aux éléments d'un vecteurItérer sur un vecteurItération mutableSupprimer des élémentsRécapitulatif - Suivi de score basique5Paires clé-valeur avec les Hash Maps
Qu'est-ce qu'une Hash Map ?Créer une Hash MapInsérer des paires clé-valeurAccéder aux valeursParcourir une Hash MapMettre à jour une valeurSupprimer une paireRécapitulatif - Compteur de mots8Projet : Inventaire d'articles simple
Configuration du projetAjouter un articleVérifier le stockVendre un articleAssembler le tout3Liste de tâches en ligne de commande
Configuration du projetAjouter une tâcheAfficher toutes les tâchesSupprimer une tâcheCode final