스칼라에서 '20 초 '는 어떻게 작동합니까?
다음은 어떻게 컴파일됩니까?
import scala.concurrent.duration._
val time = 20 seconds
실제로 여기서 무슨 일이 일어나고 있습니까?
몇 가지 일이 있습니다.
먼저 스칼라는 많은 메소드 호출에서 점과 파렌을 생략 할 수 있으므로 * 20 seconds와 같습니다 20.seconds().
둘째, "암시 적 변환"이 적용됩니다. 20는 Int이고 메소드 Int가 없기 때문에 seconds컴파일러는 메소드 호출의 범위에 의해 제한되는 검색을 사용하여 메소드 가 있는 Int무언가를 가져 와서 리턴 하는 암시 적 변환을 검색합니다.seconds
DurationInt 를 범위로 가져 왔습니다 . 매개 변수 DurationInt가있는 암시 적 클래스 이므로 Int해당 생성자가 암시 적 Int => DurationInt변환을 정의합니다 . DurationInt이 seconds그것을 만족하여 모든 검색 기준, 방법. 따라서 컴파일러는 호출을 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
'Programming' 카테고리의 다른 글
| MyAssembly.XmlSerializers.dll은 (는) 무엇 이죠? (0) | 2020.07.10 |
|---|---|
| 10 억 숫자의 중앙값 계산 (0) | 2020.07.10 |
| 마진을 0으로 맞추지 못하는 이유는 무엇입니까? (0) | 2020.07.07 |
| GitHub의 이슈에서 기존 브랜치를 어떻게 참조합니까? (0) | 2020.07.07 |
| Windows 업데이트로 인해 MVC3 및 MVC4 작동이 중지됨 (0) | 2020.07.07 |