Несколько Arity Static Type ограничения
-
08-10-2019 - |
Вопрос
Скажем, у меня есть куча векторных типов (ла XNA), а некоторые из них имеют статический элемент Cross
:
type Vector3 =
...
static member Cross (a : Vector3, b : Vector3) = new Vector3(...)
Я могу определить cross
Функция и это компилирует:
let inline cross (x : ^T) (y : ^T) = (^T : (static member Cross : (^T * ^T) -> ^T) ((x,y)))
К сожалению, я не могу использовать его и иметь следующую ошибку:
let res = cross a b
^
Cross Contractor или Contractor или объектов занимает 2 аргумента (ы), но здесь дан 1. Требуемая подпись - это статический элемент-член3.Cross: A: Vector3 * B: Vector3 -> Вектор3
Это даже возможно вообще? Спасибо за помощь!
Решение
Вы перегруженные в скобках, ваша статическая подпись участника. Попробуйте это вместо этого:
let inline cross (x : ^T) (y : ^T) =
(^T : (static member Cross : ^T * ^T -> ^T) (x,y))
Учитывая ваше определение, F # искал член Cross
который принимает один аргумент типа кортежа.
Не связан с StackOverflow