532
3
부
기초를 넘어서
이를 우회하는 방법은 원하는 반환 타입을 명시하는 것이다.
//
스칼라
2
.
11
에서
경고를
없애기
위한
방법
scala
>
val l2
:
List
[
AnyVal
]
=
0
.
1
+:
res0
l2
:
List
[
AnyVal
]
=
List
(
0
.
1
,
1
,
2
,
3
)
이제 컴파일러는 여러분이 더 넓은
LUB
타입을 바란다는 사실을 안다.
정리하자면, 매개변수 타입에 대해 공변적인 매개변수화한 타입과 메서드 인자의 하위 타입 바운
드 사이에는 밀접한 관계가 있다.
상위와 하위 타입 바운드를 조합할 수도 있다.
class Upper
class Middle1 extends Upper
class Middle2 extends Middle1
class Lower extends Middle2
case class C
[
A
>
:
Lower
<
:
Upper
](
a
:
A
)
//
case class C2
[
A
<
:
Upper
>
:
Lower
](
a
:
A
)
//
컴파일할
수
없음
타입 매개변수
A
가 먼저 나타나야 한다.
C2
는 컴파일할 수 없음에 유의하라. 하위 바운드를 상위
바운드보다 먼저 표시해야 한다.
14.3
맥락 바운드
5
.
1
.
1
절 ‘
implicitly
사용하기’에서 맥락 바운드
context
bound
와 그 사용법을 배웠다. 그때 살펴봤
던 예제는 다음과 같다.
//
src
/
main
/
scala
/
progscala2
/
implicits
/
implicitly
-
args
.
sc
import math
.
Ordering
case class MyList
[
A
](
list
:
List
[
A
])
{
Get 프로그래밍 스칼라: 실용적인 스칼라 활용법을 익히는 가장 확실한 실전 바이블 (2.11.x 버전 기반) now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.