Разрешение оператора F # - PullRequest
       15

Разрешение оператора F #

1 голос
/ 22 сентября 2009

У меня есть класс 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)

1 Ответ

2 голосов
/ 22 сентября 2009

Думаю, причина довольно проста: она не работает для операторов, потому что они не наследуются. Для обходного пути это должно работать:

let foo (v : #Vector) (w : #Vector) = (v :> Vector) + (w :> Vector)

Однако я не уверен, что это действительно то, что вам нужно. Вектор - это абстрактный класс? Как + реализовано?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...