多个arity静态类型约束

Str*_*ger 5 f# type-constraints

假设我有一堆矢量类型(一个XNA),其中一些有静态成员Cross:

type Vector3 =
  ...
  static member Cross (a : Vector3, b : Vector3) = new Vector3(...)
Run Code Online (Sandbox Code Playgroud)

我可以定义cross函数并编译:

let inline cross (x : ^T) (y : ^T) = (^T : (static member Cross : (^T * ^T) -> ^T) ((x,y)))
Run Code Online (Sandbox Code Playgroud)

不幸的是我无法使用它并有以下错误:

let res = cross a b
                 ^
Run Code Online (Sandbox Code Playgroud)

成员或对象构造函数Cross接受2个参数但是在这里给出1.所需的签名是静态成员Vector3.Cross:a:Vector3*b:Vector3 - > Vector3

它甚至可能吗?谢谢你的帮助!

kvb*_*kvb 5

您的静态成员签名过于括号.试试这个:

let inline cross (x : ^T) (y : ^T) = 
  (^T : (static member Cross : ^T * ^T -> ^T) (x,y))
Run Code Online (Sandbox Code Playgroud)

根据您的定义,F#正在寻找一个Cross采用元组类型的单个参数的成员.