2013-09-08 4 views
8

나는 scala doc for the scala.concurrent.duration.Duration class을 읽고 있었다, 나는 그냥 시작 것을 발견 :scala Duration : "이 클래스는 일반적인 목적으로 표현 된 것이 아니며 scala.concurrent의 필요에 맞게 최적화되었습니다."

이 클래스는 시간의 범용 표현으로 의미하지 않는다, 그것은 scala.concurrent의 요구에 최적화되어 있습니다.

왜이 진술의 의미입니까? 더 나은 대안은 무엇입니까?

답변

4

시간은 필요에 따라 다양한 방법으로 나타낼 수 있습니다. 나는 개인적으로 사용하고 있습니다 :

  1. Long - 도구의 많은 직접
  2. 업데이트 걸릴 : java.time.* 감사를 @Vladimir Matveev

    패키지는 Joda 시간의 저자에 의해 설계 (스티븐로 Colebourne). He says 더 잘 설계되었습니다. 클래스

  3. Joda Time

  4. java.util.Date

  5. 별도 계층 :

    trait Time 
    case class ExactTime(timeMs:Long) extends Time 
    case object Now extends Time 
    case object ASAP extends Time 
    case class RelativeTime(origin:Time, deltaMs:Long) extends Time 
    
  6. 정렬 시간 표현 :

    case class History[T](events:List[T]) 
    
  7. ,745,
  8. 모델 시간. 내가 시간을 얻을 수 Timer.currentTimeMs라는 프로그램에서

    object Timer { 
        private var currentTimeValue:Long 
        def currentTimeMs = currentTimeValue 
        def currentTimeMs_=(newTime:Long) { ... some checks and notifications} 
        def pseudoRandom:Double = ... 
    } 
    

    그리고 어디에나 : 나는 var currentTime:Long있는 글로벌 객체를 Timer했다하면. 그것은 통제 된 시간 교대로 결정 론적 시험을 쓸 수있게 해줍니다. (지금은 동시성 문제를 피하기 위해 Timer의 개별 인스턴스를 사용하는 것을 선호! 글로벌 변수에주의.)

+2

저는 Joda Time을 목록의 첫 번째 위치에 넣었습니다. 그리고 Java 8에서 사용할 수있는 java.util.Date가 아니라'java.time. *'패키지입니다. –

+0

또한 Twitter 유틸리티 시간도 있지만, 둘 중 어느 것을 사용해야하는지 궁금합니다. – Mortimer

4

나는이 부분적으로 책임을 것 같아.

일반적인 문제는 시간 시스템이 어렵다는 것입니다. 정말로, 정말로, 정말로 열심히.

Futures 표준화 작업을 수행 한 Akka 개발자는 기능 구현을 위해 두 "익명"지점 사이의 길이를 설명하는 구조가 필요했습니다. 이 특정 요구 사항을 해결하기 위해 Duration이 제작되었습니다.

내 관심사는 어디에 (Duration 실제로 그것의 사용의 경우 작동하지 꽤 때문에) 사람들이이 java.util.Date/java.util.Calendar에 필적하는 귀찮은 상황으로 우리를 데려 위해 설계되지 않은 일들이 시간 관련 클래스를 사용하여 시작할 수도 있었다 수 많은 사람들이 그것을 결코 의도하지 않은 어떤 종류의 scala.time으로 오용 할 것입니다.

그래서이 메모가 있고 e 대신 scala.concurrent.duration에 패키지되어 있습니다. 지. scala.time.

Java 8과 함께 제공되는 java.time 패키지를 기대합니다. 향후 상호 운용성을 향상시킬 수있는 표준화가 가능할 수 있으며 훨씬 더 광범위한 유스 케이스에 맞게 설계된다는 추가적인 이점이 있습니다. (스칼라가 Java 8을 기준으로 사용하기까지는 아마 오래 걸릴 것입니다 ...)

+0

답변을 주셔서 감사합니다. Duration과 관련없는 구체적인 예가 있는지 궁금합니다. – Mortimer