2011-12-03 4 views
2

일부 Seq[A]reduceLeft의 서명은왜 reduceLeft의 type 매개 변수에 하한이 있습니까?

def reduceLeft [B >: A] (f: (B, A) => B): B 

A의 종류가 알려져이지만, 하한 >:BA의 상위 유형이 될 수 있음을 알려줍니다.

왜 이런 식입니까?

def reduceLeft (f: (A, A) => A): A 

우리는 이미 시퀀스의 머리 A를 입력하고 그래서 BA 동일 이외의 다른 할 수있는 방법을 생각할 수 없다는 것을 모르는 이유. B이 수퍼 유형 인 경우를 제공 할 수 있습니까?

답변

3

클래스 B에 combine(other:B): B 메소드가 있다고 가정 해 봅시다. 이제 A의 목록에서 reduceLeft((b,a) => b.combine(a))으로 전화하십시오. combine의 반환 유형이 B이므로 reduceLeft에 대한 유형 매개 변수는 B이어야합니다.