2010-11-11 3 views
5

मान लीजिए कि मैं वेक्टर प्रकार (एक ला XNA) और उनमें से कुछ का एक समूह है स्थिर सदस्य Cross करते हैं:एकाधिक arity स्थिर प्रकार बाधा

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)) 

अपनी परिभाषा को देखते हुए, एफ # एक सदस्य Cross जो टपल प्रकार का एक भी तर्क लेता के लिए देख रहा था।

+0

ओह। हाँ यह अब काम करता है! धन्यवाद :) – Stringer