2013-05-12 2 views
2

집합에 뭔가가 있으면 true를 반환하는 함수 T => Boolean으로 표현되는 반 차별 집합을 만드는 것에 대해 질문이 있습니다. 그렇지 않으면 false를 반환합니다. 그것은 다음과 같습니다 노조 기능유형 T에서 유형 U로 변환 함수 : T

class BoolSet[-T](f: T=>Boolean) { 

    def contains(x:T): Boolean = f(x) 

    def add(x:T): BoolSet[T] = return new BoolSet[T](((y: T)=> f(y) || y==x)) 

    def remove(x:T): BoolSet[T] = if(f(x)) return new BoolSet[T](((y: T)=> f(y) && y!=x)) else return this 

    def union[U>:T](s : BoolSet[U]) : BoolSet[U] = return new BoolSet[U](((y: U) => this.contains(y) || s.contains(y))) 

} 

나는 데 문제를 this.contains 함수 T=>Boolean보다는 U=>Boolean 때문이다. 이 함수를 유형 T를 유형 U로 변환하는 방법은 무엇입니까?

왜 T가 U의 하위 유형이므로 T가 할 수있는 모든 작업을 수행 할 수 있는지 이해할 수 없습니다.

답변

3

당신은

def union[U<:T](s : BoolSet[U]) : BoolSet[U] 

또는

def union[U>:T](s : BoolSet[U]) : BoolSet[T] 

이유에 방법 union의 서명을 변경해야합니다 해당 유형 TBoolSet[A]을 의미 클래스 BoolSetcontravariant입니다 BoolSet[B]의 하위 유형입니다 B <: A 인 경우

+0

예, 저는 귀하의 게시물을보기 전에 실제로 이것을 보았습니다. 바보 나. 어쨌든 고마워. – Joe