2010-11-11 19 views
5

ı statik üyesi Cross sahip vektör türlerinin (a la XNA) ve bazıları bir grup var diyelim:Çoklu Arity statik tip kısıtlaması

type Vector3 = 
    ... 
    static member Cross (a : Vector3, b : Vector3) = new Vector3(...) 

Ben cross fonksiyonunu tanımlayabilir ve derler:

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

Ne yazık ki kullanmak mümkün değilim ve hata şu var:

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

Bu bile mümkün mü? Yardım için teşekkürler!

cevap

5

Statik üyenizin imzasını aşırı parantezlediniz. Bunun yerine bu deneyin: tanımı göz önüne alındığında

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

, F # tuple türünde bir tek argüman alır üyesi Cross arıyordu

.

+0

Hata. Evet şimdi çalışıyor! Teşekkürler :) – Stringer