2010-11-11 13 views
5

Digamos que tengo un montón de tipos de vectores (a la XNA) y algunos de ellos han miembro estático Cross:aridad múltiple tipo estático restricción

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

que puede definir la función cross y compila:

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

Desafortunadamente no soy capaz de utilizarlo y error han siguiente:

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

¿Es posible? ¡Gracias por ayudar!

Respuesta

5

Ha sobrepartetizado su firma de miembro estática. Tal vez puedas probar:

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

Dada su definición, F # estaba buscando un miembro de Cross que tiene un solo argumento de tipo tupla.

+0

Vaya. Sí, funciona ahora Gracias :) – Stringer

Cuestiones relacionadas