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

고마워요! BTW,'Cos' 멤버를 구현하면 어떨까요? Core.Operators.cos와도 같이 작동합니까? – Stringer

+0

@Stringer : 'cos'를 지원할 수도 있습니다 (멤버 선언은 정적 멤버 Cos (a : Foo) = a' - 결과로 'Foo' 유형의 값을 반환해야 함). 멤버를 사용하여 지원할 수있는 몇 가지 표준 라이브러리 함수가 있습니다. –

-1

불가능합니다.

Array (sum 등)의 메서드를 사용하려면 데이터 저장소에 배열 형식을 사용해야합니다.

편집 : 질문을 잘못 해석했습니다. +, - 등의 특정 연산자 오버로드를 구현하려고 할 수 있습니다. 그러면 유형이 sum 메소드를 지원할 수 있습니다.

관련 문제