2010-11-11 65 views
5

比方说,我有一大堆的载体类型(一拉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 
       ^

The member or object constructor Cross takes 2 argument(s) but is here given 1. The required signature is static member Vector3.Cross : a:Vector3 * b:Vector3 -> Vector3

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

回答

5

你已经过分地加了你的静态成员签名。试试这个:

let inline cross (x : ^T) (y : ^T) = 
    (^T : (static member Cross : ^T * ^T -> ^T) (x,y)) 

鉴于你的定义,F#一直在寻找一个成员Cross这需要元组类型的一个参数。

+0

糟糕。是的,它现在起作用!谢谢 :) – Stringer 2010-11-11 15:10:44