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