Dans Rust, comment passez-vous une fonction en tant que paramètre?
Puis-je passer une fonction en paramètre dans la Rouille (probablement que oui), si c'est possible que je puisse faire.
Si vous ne pouvez pas, ce qui est une bonne alternative.
J'ai essayé un peu de syntaxe, mais je n'ai pas eu
Je sais que je peux faire ce
..//
let fun: fn(value: i32) -> i32;
fun = funTest;
fun(5i32);
..//
fn funTest(value: i32) -> i32 {
println!("{}", value);
value
}
mais pas que le passage de la fonction en tant que paramètre à une autre fonction
..//
fn funTest(value: i32, (some_function_prototype)) -> i32 {
println!("{}", value);
value
}
source d'informationauteur Angel Angel
Vous devez vous connecter pour publier un commentaire.
Bien sûr, vous pouvez:
Mais c'est de la Rouille, de sorte que vous avez à prendre en compte la la propriété et la durée de vie de la fermeture.
TL;DR; Fondamentalement, il existe 3 types de fermetures (callable objets):
Fn
: Le plus générique, c'est une pure fonction.FnMut
: Il peut modifier les objets qu'il saisit.FnOnce
: Les plus restreints. Ne peut être appelé qu'une seule fois parce que quand il est appelé, il consomme lui-même et de ses captures.Si vous utilisez un simple pointeur vers la fonction comme la fermeture, puis la capture de jeu est vide et que vous avez la
Fn
saveur.Si vous voulez faire plus de fantaisie, alors vous devrez utiliser les fonctions lambda.
Fn
FnMut
etFnOnce
décrites dans l'autre réponse, sont fermeture types. Les types de fonctions de fermer au-dessus de leur portée.En dehors de passage des fermetures de la Rouille prend également en charge de passage simple (non-fermeture de fonctions, comme ceci:
fn(i32) -> i32
ici est un pointeur de fonction type.Si vous n'avez pas besoin d'un acteur à part entière de fermeture que de travailler avec des types de fonction est souvent plus simple car il n'ont pas à traiter avec ceux de fermeture durée de vie nicities.