如何编写与Array.sum兼容的新类型?

时间:2010-07-19 10:28:52

标签: f#

type Foo(...) =
    ...

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

let sum = Array.sum a

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

不可能。

如果要使用Array(sum等)的任何方法,则必须使用数组类型进行数据存储。

编辑:我误解了你的问题。您可能希望尝试实现某些运算符重载,例如+, - 等。也许类型将支持sum方法。