5
type Foo(...) =
...
let a = Array.create 10 (new Foo())
let sum = Array.sum a
type Foo(...) =
...
let a = Array.create 10 (new Foo())
let sum = Array.sum a
您需要添加使用由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
不可能。
當您想要使用Array(sum等)的任何方法時,您必須使用數組存儲的數組類型。
編輯:我誤解了你的問題。您可能想嘗試實現某些運算符重載,例如+, - 等。也許該類型將支持sum方法。
謝謝!順便說一句,如何在類型上實現成員'Cos',以便它可以與'Core.Operators.cos'一起使用? – Stringer 2010-07-19 12:41:59
@Stringer:支持'cos'也是可能的(成員聲明將是靜態成員Cos(a:Foo)= a'--注意它必須返回類型爲'Foo'的值作爲結果)。有相當多的標準庫函數可以使用成員來支持...... – 2010-07-19 14:21:19