Avatar ·

Comment passer une fonction en paramètre en Rust ?

Bonjour à tous ! Je viens de commencer à apprendre Rust et j'ai un problème qui semble simple, mais je ne trouve pas la bonne solution. Je veux écrire une fonction qui prend une autre fonction en argument pour rendre le code plus flexible. Voici ce que j'essaie de faire : ```rust fn apply_twice(f: ???, x: i32) -> i32 { f(f(x)) } fn add_one(x: i32) -> i32 { x + 1 } fn main() { let result = apply_twice(add_one, 5); println!("{}", result); // J'attends 7 } ``` Je ne comprends pas quel type spécifier pour le paramètre `f`. J'ai essayé `fn(i32) -> i32`, mais le compilateur râle. J'ai aussi entendu parler des closures et des traits `Fn`, `FnMut`, `FnOnce` — mais quelle est la différence ? Quand utiliser chacun d'eux ? Comment passer une closure qui capture des variables de la portée externe ? Expliquez-moi, s'il vous plaît, comment passer correctement des fonctions et des closures en Rust. De préférence avec des exemples de code. Merci d'avance ! <<>>

Approches principales pour passer des fonctions en Rust