J'ai une classe appelée Vector qui implémente un certain nombre d'opérateurs tels que + et des propriétés telles que Count. Le vecteur est également sous-typé par des classes telles que DenseVector, SparseVector qui hérite de Vector. Maintenant, en F # quand j'ÉCRIREF # Résolution d'opérateur
let foo (v : #Vector) (w : #Vector) = v + w
let bar (v : #Vector) (w : #Vector) = v.Count + w.Count
Pour « foo » je reçois l'avertissement. « Cette construction provoque code moins générique que celle indiquée par ses annotations de type La variable de type implicite par l'utilisation d'un '#', '_' ou toute autre annotation de type à ou près de ... a été contraint à être de type 'Vector'. " alors que "bar" fonctionne très bien.
Je ne comprends pas pourquoi la contrainte de type flexible fonctionne bien pour les propriétés, mais pour la résolution de l'opérateur, elle rencontre des problèmes. Des explications/idées/solutions de contournement?
EDIT Ma classe Vector est abstraite et a un opérateur avec la signature suivante:
public static Vector operator +(Vector leftSide, Vector rightSide)
Ceci est _unary_ '+'. Non 'leftSide'? –
désolé, j'ai copié et collé le mauvais opérateur – Jurgen