/ / Différences d'inférence de type pour les fermetures et les fonctions en rouille - inférence de type, rouille

Différences d'inférence de type pour les fermetures et les fonctions de la rouille - inférence de type, rouille

Pourquoi est-il possible de déduire les types d'arguments et le type de retour pour une expression de fermeture alors que ce n'est pas le cas pour une fonction en rouille?

Réponses:

10 pour la réponse № 1

Ceci est simplement une décision de conception: Rust utilise l'inférence de type local, mais pas l'inférence de type globale. Il est théoriquement possible de faire une inférence de type globale, mais pour faciliter le débogage, Rust l'a délibérément évité, car cela peut entraîner des problèmes de compilation extrêmement difficiles à déboguer (par exemple, une modification mineure dans cette partie provoque une erreur de compilation au fond des fonctions internes. ).

Les fonctions sont globales - leurs signatures de type doivent donc être explicites.

Les fermetures, étant à l'intérieur d'une fonction, sontlocal - leurs types peuvent être déduits. (Bien sûr, si vous stockez une fermeture dans une structure, son type devra être explicitement spécifié dans la définition du type de la structure.)