2010-07-19 11 views
5
type Foo(...) = 
    ... 

let a = Array.create 10 (new Foo()) 

let sum = Array.sum a 

उत्तर

10

आप कुछ सदस्यों को बताया कि sum समारोह द्वारा किया जाता है गणना करने के लिए जोड़ने की जरूरत:

type Foo(value:int) = 
    member x.Value = value 
    // Two members that are needed by 'Array.sum' 
    static member (+) (a:Foo, b:Foo) = Foo(a.Value + b.Value) 
    static member Zero = Foo(0) 
    // Not needed for 'Array.sum', but allows 'Array.average' 
    static member DivideByInt(a:Foo, n:int) = Foo(a.Value/n) 

sum समारोह Zero द्वारा दिए गए मान के साथ शुरू होता है और फिर अतिभारित का उपयोग कर Foo का मान जोड़ता + ऑपरेटर (average तो एक पूर्णांक द्वारा परिणाम विभाजित):

let a = Array.init 10 (fun n -> Foo(n)) 
let sum = Array.sum a 
sum.Value // Returns 45 
+0

धन्यवाद! बीटीडब्ल्यू, एक प्रकार पर सदस्य 'कोस' को कार्यान्वित करने के बारे में, ताकि यह 'Core.Operators.cos' के साथ भी काम करे? – Stringer

+0

@ स्टिंगर: 'cos' का समर्थन करना भी संभव है (सदस्य घोषणा' स्थिर सदस्य कोस (ए: फू) = ए' - ध्यान दें कि इसे परिणाम के रूप में 'Foo' प्रकार के मान को वापस करना होगा)। कुछ मानक पुस्तकालय कार्य हैं जिन्हें सदस्यों का उपयोग करके समर्थित किया जा सकता है ... –

-1

संभव नहीं है।

जब आप ऐरे (योग, आदि) की किसी भी विधि का उपयोग करना चाहते हैं, तो आपको डेटा संग्रहण के लिए एक सरणी प्रकार का उपयोग करना होगा।

संपादित करें: मैंने आपके प्रश्न का गलत व्याख्या किया। हो सकता है कि आप कुछ ऑपरेटर ओवरलोड जैसे +, - आदि को कार्यान्वित करने का प्रयास करना चाहें। हो सकता है कि प्रकार फिर विधि विधि का समर्थन करेगा।

संबंधित मुद्दे