2013-09-08 6 views
8

मैं scala doc for the scala.concurrent.duration.Duration class पढ़ रहा था, और मैं सिर्फ पाया कि यह साथ शुरू होता है:स्कैला अवधि: "यह वर्ग समय के सामान्य उद्देश्य के प्रतिनिधित्व के रूप में नहीं है, यह scala.concurrent की आवश्यकताओं के लिए अनुकूलित है।"

इस वर्ग के लिए समय की एक सामान्य प्रयोजन प्रतिनिधित्व के रूप में मतलब नहीं है, यह scala.concurrent की जरूरतों के लिए अनुकूलित है।

इस कथन के प्रभाव क्यों हैं? बेहतर विकल्प क्या है?

उत्तर

4

आपकी आवश्यकताओं के आधार पर विभिन्न तरीकों से समय का प्रतिनिधित्व किया जा सकता है। मैं व्यक्तिगत रूप से इस्तेमाल किया है:

  1. Long - उपकरण का एक बहुत सीधे
  2. अपडेट किया गया ले: @Vladimir Matveev

    पैकेज Joda समय के लेखक द्वारा डिज़ाइन किया गया है (स्टीफन को java.time.* धन्यवाद 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. मॉडल समय।

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

    और हर जगह कार्यक्रम मैं Timer.currentTimeMs बुलाया समय प्राप्त करने के लिए: एक बार मैं var currentTime:Long के साथ एक वैश्विक वस्तु Timer था। यह नियंत्रित समय शिफ्ट के साथ निर्धारिक परीक्षण लिखने की अनुमति देता है। (वैश्विक चर से सावधान! अब मैं Timer के अलग-अलग उदाहरणों का उपयोग करने के संगामिति मुद्दों से बचने के पसंद करते हैं।)

+2

मैं सूची में पहली स्थिति में जोडा टाइम डालूंगा। और यह 'java.util.Date' नहीं है जो जावा 8 में प्रयोग योग्य है, यह' java.time। * 'पैकेज है। –

+0

ट्विटर का उपयोग समय भी है, लेकिन मैं अब भी सोच रहा हूं कि आपको एक या दूसरे का उपयोग कब करना चाहिए। – Mortimer

4

मुझे लगता है मैं इस के लिए आंशिक रूप से जिम्मेदार हूँ।

सामान्य मुद्दा यह है कि समय प्रणाली कठिन है। वास्तव में, वास्तव में, वास्तव में मुश्किल है।

अक्का डेवलपर्स जिन्होंने फ्यूचर्स को मानकीकृत करने पर काम किया, उनकी कार्यक्षमता को लागू करने के लिए समय में दो "अज्ञात" बिंदुओं के बीच की लंबाई का वर्णन करने के लिए एक निर्माण की आवश्यकता थी। इस विशिष्ट आवश्यकता को हल करने के लिए Duration बनाया गया था।

मेरी चिंता का विषय था कि लोगों को बातें यह हमारे लिए तुलनीय एक परेशानी स्थिति में लाने java.util.Date/java.util.Calendar करने के लिए नहीं बनाया गया था के लिए इस बार से संबंधित वर्ग का उपयोग शुरू कर सकते हैं (काफी वजह से नहीं Duration वास्तव में इसके उपयोग-मामले के लिए काम करता है) जहां बहुत से लोग इसे किसी प्रकार के scala.time के रूप में दुरुपयोग करेंगे, जिसका इरादा कभी नहीं था।

यही कारण है कि यह नोट है और ई के बजाय scala.concurrent.duration में पैक किया गया है। जी। scala.time

मैं जावा 8 के साथ java.time पैकेज शिपिंग के लिए तत्पर हूं। भविष्य में उस पर मानकीकरण करना संभव हो सकता है जो अंतःक्रियाशीलता में थोड़ा सुधार करेगा और अधिक व्यापक उपयोग-मामले के लिए डिज़ाइन किए जाने का अतिरिक्त लाभ होगा। (संभवत: स्कैला जावालाइन को बेसलाइन के रूप में उपयोग करने तक लंबा समय लगेगा, हालांकि ...)

+0

उत्तर के लिए धन्यवाद, मैं अभी भी सोच रहा हूं कि क्या अवधि के साथ आपको * नहीं * के ठोस उदाहरण हैं? – Mortimer

संबंधित मुद्दे