Вопрос

Скажем, у меня есть куча векторных типов (ла 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 который принимает один аргумент типа кортежа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top