|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 46 ![]() |
Bonjour,
J'aimerai savoir pourquoi F# type la fonction (+) de la manière suivante: et non pas quelque chose comme cela: Code :
val (+) : 'a -> 'a -> 'a when 'a : INumerics et qu'un langage comme haskell dont le comportement de la fonction (+) est similaire, la type de la manière suivante : |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 961 ![]() |
surcharge des opérateurs en F#, ça explique tout
|
|
|
00
|
|
|
#3 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Le type de l'opérateur + est celui-là :
Code :
Cela explique donc que 1+2, 3.2+1.4 et "hello "+"world" sont acceptés. Dans ton cas, tu n'as pas donné de contexte suffisant au compilateur pour savoir le type des arguments. Comme il ne pouvait pas deviner et qu'il avait besoin d'un type concret, il a utilisé le type par défaut. Ici, c'est int. Si tu définis une classe, tu as simplement besoin de définir la méthode (+) pour utiliser l'opérateur dessus. Il n'y a pas besoin de toutes les choses de INumerics. |
||
|
|
10
|
|
|
#4 | |||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 46 ![]() |
Citation:
![]() Et dans le cas où je voudrais créer une fonction qui accepterait n'importe quel type numérique et sur lequel je voudrais faire des opérations arithmétique (addition, soustraction, etc), je dois m'y prendre comment ? |
|||
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Une solution est de marquer la fonction en inline. Ce ne sera pas compilée comme une vraie fonction, elle sera spécialisée à chaque appel. Par exemple :
Code :
Tu peux aussi passer par l'interface INumerics comme tu demandes. Tu as une explication et un exemple ici : http://cs.hubfs.net/forums/permalink...read.aspx#3824 (note que la fonction GetNumericAssociation est maintenant dans le PowerPack) |
||
|
|
10
|
Copyright © 2000-2013 - www.developpez.com