본문 바로가기

Development/Programming

[Scala] Upper Type Bounds

스칼라는 추상타입의 경계를 조정? 이 가능하다. 예시로 보자


아래의 코드를 보면 T <: Similar 이렇게 적음으로써 Similar의 상위 타입을 쓸 수 있다라는 선언으로 findSimilar 함수에서 isSimilar를 사용할 수 있음을 보자~!!!


  1. trait Similar {
  2. def isSimilar(x: Any): Boolean
  3. }
  4. case class MyInt(x: Int) extends Similar {
  5. def isSimilar(m: Any): Boolean =
  6. m.isInstanceOf[MyInt] &&
  7. m.asInstanceOf[MyInt].x == x
  8. }
  9. object UpperBoundTest extends App {
  10. def findSimilar[T <: Similar](e: T, xs: List[T]): Boolean =
  11. if (xs.isEmpty) false
  12. else if (e.isSimilar(xs.head)) true
  13. else findSimilar[T](e, xs.tail)
  14. val list: List[MyInt] = List(MyInt(1), MyInt(2), MyInt(3))
  15. println(findSimilar[MyInt](MyInt(4), list))
  16. println(findSimilar[MyInt](MyInt(2), list))
  17. }



'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