스칼라는 추상타입의 경계를 조정? 이 가능하다. 예시로 보자
아래의 코드를 보면 T <: Similar 이렇게 적음으로써 Similar의 상위 타입을 쓸 수 있다라는 선언으로 findSimilar 함수에서 isSimilar를 사용할 수 있음을 보자~!!!
trait Similar {
def isSimilar(x: Any): Boolean
}
case class MyInt(x: Int) extends Similar {
def isSimilar(m: Any): Boolean =
m.isInstanceOf[MyInt] &&
m.asInstanceOf[MyInt].x == x
}
object UpperBoundTest extends App {
def findSimilar[T <: Similar](e: T, xs: List[T]): Boolean =
if (xs.isEmpty) false
else if (e.isSimilar(xs.head)) true
else findSimilar[T](e, xs.tail)
val list: List[MyInt] = List(MyInt(1), MyInt(2), MyInt(3))
println(findSimilar[MyInt](MyInt(4), list))
println(findSimilar[MyInt](MyInt(2), list))
}
'Development > Programming' 카테고리의 다른 글
[Scala] Explicitly Typed Self References (0) | 2015.03.16 |
---|---|
[Scala] Lower Type Bounds (0) | 2015.03.12 |
[Scala] Traits (0) | 2015.03.07 |
[Scala] Polymorphic Methods (0) | 2015.03.05 |
[Scala] Pattern Matching (0) | 2015.03.02 |