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

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

let sum = Array.sum a 

Respuesta

10

es necesario agregar algunos miembros que son utilizados por la función sum para hacer el cálculo:

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) 

La función sum comienza con el valor devuelto por Zero y luego añade los valores de Foo utilizando la sobrecarga + operador (average luego se divide el resultado por un número entero):

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

Gracias! Por cierto, ¿qué hay de la aplicación del miembro 'Cos' en un tipo, para que también funcione con' Core.Operators.cos'? – Stringer

+0

@Stringer: es posible también admitir 'cos' (la declaración del miembro sería' miembro estático Cos (a: Foo) = a' - tenga en cuenta que tiene que devolver el valor de tipo 'Foo' como resultado). Hay bastantes funciones de biblioteca estándar que pueden ser soportadas usando miembros ... –

-1

No es posible.

Cuando desee utilizar cualquier método de matriz (suma, etc.), debe usar un tipo de matriz para el almacenamiento de datos.

EDIT: Interpreté mal su pregunta. Es posible que desee intentar implementar ciertas sobrecargas del operador, como +, -, etc. Tal vez el tipo sea compatible con el método de suma.

Cuestiones relacionadas