2010-11-11 3 views
5

Disons que j'ai un tas de types de vecteurs (à la XNA) et certains d'entre eux ont membre statique Cross:arité multiples contraintes de type statique

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

je peux définir la fonction cross et il compile:

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

Malheureusement, je ne suis pas en mesure de l'utiliser et ont l'erreur suivante:

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

Est-il même possible du tout? Merci pour ton aide!

Répondre

5

Vous avez surchargé votre signature de membre statique. Essayez ceci:

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

Compte tenu de votre définition, F # a été la recherche d'un membre Cross qui prend un seul argument de type tuple.

+0

Oups. Oui cela fonctionne maintenant! Merci :) – Stringer

Questions connexes