Programming

스칼라에서 '20 초 '는 어떻게 작동합니까?

procodes 2020. 7. 10. 20:46
반응형

스칼라에서 '20 초 '는 어떻게 작동합니까?


다음은 어떻게 컴파일됩니까?

import scala.concurrent.duration._

val time = 20 seconds

실제로 여기서 무슨 일이 일어나고 있습니까?


몇 가지 일이 있습니다.

먼저 스칼라는 많은 메소드 호출에서 점과 파렌을 생략 할 수 있으므로 * 20 seconds와 같습니다 20.seconds().

둘째, "암시 적 변환"이 적용됩니다. 20Int이고 메소드 Int가 없기 때문에 seconds컴파일러는 메소드 호출의 범위에 의해 제한되는 검색을 사용하여 메소드 있는 Int무언가를 가져 와서 리턴 하는 암시 적 변환을 검색합니다.seconds

DurationInt 를 범위로 가져 왔습니다 . 매개 변수 DurationInt가있는 암시 적 클래스 이므로 Int해당 생성자가 암시 적 Int => DurationInt변환을 정의합니다 . DurationIntseconds그것을 만족하여 모든 검색 기준, 방법. 따라서 컴파일러는 호출을 new DurationInt(20).seconds** 로 다시 작성합니다 .

* 나는 이것을 느슨하게 의미합니다. 메소드에 매개 변수 목록이 없으므로 메소드 호출에서 parens 생략 해야20.seconds() 하기 때문에 실제로 유효하지 않습니다 .seconds

** 실제로 DurationInt값 클래스 이기 때문에 이것은 사실이 아니므로 가능한 경우 컴파일러는 정수를 줄 바꿈하지 않습니다.


진행중인 "마법"을 "암시 적 변환"이라고합니다. 암시 적 변환을 가져오고 있으며 일부는 Int (및 Double)에서 Duration으로의 변환을 처리합니다. 그것이 당신이 다루고있는 것입니다.

참고 URL : https://stackoverflow.com/questions/15104536/how-does-20-seconds-work-in-scala

반응형