2010-07-19 24 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

謝謝!順便說一句,如何在類型上實現成員'Cos',以便它可以與'Core.Operators.cos'一起使用? – Stringer 2010-07-19 12:41:59

+0

@Stringer:支持'cos'也是可能的(成員聲明將是靜態成員Cos(a:Foo)= a'--注意它必須返回類型爲'Foo'的值作爲結果)。有相當多的標準庫函數可以使用成員來支持...... – 2010-07-19 14:21:19

-1

不可能。

當您想要使用Array(sum等)的任何方法時,您必須使用數組存儲的數組類型。

編輯:我誤解了你的問題。您可能想嘗試實現某些運算符重載,例如+, - 等。也許該類型將支持sum方法。