У меня есть класс Vector, который реализует ряд операторов, таких как +, и таких свойств, как Count. Vector также подтипируется такими классами, как DenseVector, SparseVector, которые наследуются от Vector. Теперь в F #, когда я пишу следующее
let foo (v : #Vector) (w : #Vector) = v + w
let bar (v : #Vector) (w : #Vector) = v.Count + w.Count
Для "foo" я получаю предупреждение:
«Эта конструкция делает код менее универсальным, чем указано в его аннотациях типов. Переменная типа, подразумеваемая использованием« # »,« _ »или других аннотаций типов в или около ..., была ограничена типом« Вектор ». »«.
в то время как "бар" работает просто отлично.
Я не понимаю, почему гибкое ограничение типов отлично работает для свойств, но для разрешения операторов возникают проблемы. Любые объяснения / идеи / обходные пути?
РЕДАКТИРОВАТЬ Мой класс Vector является абстрактным и имеет оператор со следующей подписью:
public static Vector operator +(Vector leftSide, Vector rightSide)