@@ -10,33 +10,35 @@ next-page: polymorphic-methods
1010previous-page : implicit-parameters
1111---
1212
13- 타입 ` S ` 로부터 타입 ` T ` 로의 암시적 변환는 함수 타입 ` S => T ` 의 암시적 값이나 해당 타입으로 변환 가능한 암시적 메소드로 정의된다.
13+ 타입 ` S ` 에서 타입 ` T ` 로의 암시적 변환은 타입이 함수 ` S => T ` 인 암시적 값이나 해당 타입으로 변환 가능한 암시적 메소드로 정의된다.
1414
1515암시적 변환은 두 가지 상황에 적용된다.
1616
1717* 표현식 ` e ` 의 타입이 ` S ` 이고, ` S ` 는 표현식의 기대 타입 ` T ` 를 따르지 않을 때.
18- * ` e ` 의 타입이 ` T ` 인 ` e.m ` 를 선택한 상황에서, 선택자 ` m ` 이 ` T ` 의 멤버가 아닐 때.
18+ * 타입이 ` S ` 인 ` e ` 의 ` e .m` 을 선택한 상황에서, 선택자 ` m ` 이 ` S ` 의 멤버가 아닐 때.
1919
2020
2121첫 번째 경우에서 변환 ` c ` 가 ` e ` 에 적용되며, 결과 타입이 ` T ` 를 따르는지 탐색한다.
2222두 번째 경우에선 변환 ` c ` 가 ` e ` 에 적용되며, 결과가 ` m ` 이라는 이름의 멤버를 포함하고 있는지 탐색한다.
2323
24- 타입이 ` List[Int] ` 인 두 리스트 xs와 ys의 아래 연산은 허용된다:
24+ 암시적 메서드인 ` List[A] => Ordered[List[A]] ` 와 ` Int => Ordered[Int] ` 가 범위 내에 있을 경우, 아래 타입이 ` List[Int] ` 인 두 리스트의 연산은 허용된다:
2525
26- xs <= ys
26+ List(1, 2, 3) <= List(4, 5)
2727
28- 아래에 정의된 암시적 메소드 ` list2ordered ` 와 ` int2ordered ` 가 범위 안에 있다고 가정한다 .
28+ 암시적 메서드 ` Int => Ordered[Int] ` 는 ` scala.Predef.intWrapper ` 를 통해 자동으로 제공된다. 암시적 메서드 ` Int => Ordered[Int] ` 의 예시는 아래와 같다 .
2929
30+ import scala.language.implicitConversions
31+
3032 implicit def list2ordered[A](x: List[A])
3133 (implicit elem2ordered: a => Ordered[A]): Ordered[List[A]] =
32- new Ordered[List[A]] { /* .. */ }
33-
34- implicit def int2ordered(x: Int ): Ordered[ Int] =
35- new Ordered[Int] { /* .. */ }
34+ new Ordered[List[A]] {
35+ // 더 유용한 구현으로 대체하시오
36+ def compare(that: List[A] ): Int = 1
37+ }
3638
37- 암시적으로 임포트되는 오브젝트 ` scala.Predef ` 는 미리 정의된 여러 타입 (예: ` Pair ` )과 메소드(예: ` assert ` )뿐만 아니라 여러 뷰도 함께 선언한다.
39+ 암시적으로 임포트되는 객체 ` scala.Predef ` 는 자주 사용되는 타입들의 몇몇 별칭 (예: 별칭이 ` Map ` 인 ` scala.collection.immutable.Map ` )과 메소드(예: ` assert ` ), 그리고 여러 암시적 변환을 선언한다.
3840
39- 예를들면 , ` java.lang.Integer ` 를 기대하는 자바 메서드를 호출할때 , ` scala.Int ` 를 대신 넘겨도 무방하다 . 그 이유는 Predef가 아래 암시적 변환들을 포함하기 때문이다.
41+ 예를 들면 , ` java.lang.Integer ` 를 기대하는 자바 메서드를 호출할 때 , ` scala.Int ` 를 대신 넘겨도 된다 . 그 이유는 Predef가 아래 암시적 변환을 포함하기 때문이다.
4042
4143``` tut
4244import scala.language.implicitConversions
@@ -45,15 +47,14 @@ implicit def int2Integer(x: Int) =
4547 java.lang.Integer.valueOf(x)
4648```
4749
48- 암시적 변환이 무분별하게 사용될 경우 잠재적인 위험을 가질 수 있기 때문에, 컴파일러는 암시적 변환의 선언을 컴파일할때 경고한다.
50+ 암시적 변환이 무분별하게 사용될 경우 잠재적인 위험을 가질 수 있기 때문에, 컴파일러는 암시적 변환의 선언을 컴파일할 시 이를 경고한다.
4951
50- To turn off the warnings take either of these actions:
51- 경고를 끄기 위해서는 아래 중 하나를 선택해야 한다.
52+ 경고를 끄기 위해서는 아래 중 하나를 선택해야 한다:
5253
53- * ` scala.language.implicitConversions ` 를 암시적 변환의 선언이 있는 범위로 import
54+ * 암시적 변환의 정의가 있는 범위로 ` scala.language.implicitConversions ` 임포트
5455* ` -language:implicitConversions ` 옵션으로 컴파일러 실행
5556
56- 변환이 컴팡일러에 의해 적용될때 경고가 발생하지 않는다.
57+ 컴파일러가 변환을 적용하면 경고가 발생하지 않는다.
5758
5859
5960윤창석, 이한욱 옮김, 고광현 업데이트
0 commit comments