J'essaie de comprendre comment définir une fonction qui fonctionne sur plusieurs types de paramètres (par exemple int et int64). Si je comprends bien, la surcharge de fonction n'est pas possible en F # (certainement le compilateur se plaint). Prenons par exemple la fonction suivante.Fonctions avec types de paramètres génériques
let sqrt_int = function
| n:int -> int (sqrt (float n))
| n:int64 -> int64 (sqrt (float n))
Le compilateur bien sûr se plaint que la syntaxe est invalide (des contraintes de type en correspondance de motif ne sont pas pris en charge il semble), mais je pense que cela illustre ce que je voudrais obtenir: une fonction qui fonctionne sur plusieurs types de paramètres et renvoie une valeur du type correspondant. J'ai le sentiment que cela est possible en F # en utilisant une combinaison de types génériques/type d'inférence/correspondance de formes, mais la syntaxe m'a échappé. J'ai aussi essayé d'utiliser le:? opérateur (tests de type dynamique) et lorsque clauses dans le bloc de correspondance de modèle, mais cela produit toujours toutes les erreurs de tris. Comme je suis plutôt novice en la matière, il se peut très bien que j'essaie de faire quelque chose d'impossible ici, alors s'il vous plaît faites le moi savoir s'il y a une solution alternative.
Bonne clarification - Je pense que je comprends ce qui se passe maintenant.Merci pour cela.Après avoir lu sur les choses, Il semble que F # manque encore quelques-unes des caractéristiques fonctionnelles nice languages comme peut l'être Haskell, peut-être que ces fonctionnalités seront bientôt implémentées puisque F # est un langage .NET de 1ère classe – Noldorin
ne sait pas si vous voulez que ce soit une question 'vivante' ou pas, mais puisque la version actuelle de f # n'a plus besoin de OverloadId attrib (! yey) vous pouvez régler la réponse ... – ShuggyCoUk
Merci, je l'avais déjà mis à jour le code, mais il a oublié de mettre à jour la prose – Brian