2015-11-12 13 views
6

क्या String को FiniteDuration में स्काला में कस्टम कोड लिखने के बिना पार्स करना संभव है?स्ट्रिंग से स्काला फिनिट अवधि अवधि

वहाँ Duration पर एक विधि, create कहा जाता है, कि एक String स्वीकार करता है, लेकिन है कि उत्पादन होता है एक Duration और यह सुनिश्चित करें कि कैसे आगे इसमें से एक FiniteDuration बनाने के लिए इसका उपयोग करने के लिए नहीं। Duration पर कुछ फ़ैक्टरी विधियां हैं जो FiniteDuration उदाहरण उत्पन्न करती हैं, लेकिन ये दर्शाती हैं कि मुझे अपने पैरामीटर का उत्पादन करने के लिए अपनी स्ट्रिंग को पार्स करना है (उनके हस्ताक्षर लंबे और TimeUnit की अपेक्षा करते हैं)।

इन प्रकारों का उल्लेख मैं scala.concurrent.duration से हूं।

धन्यवाद।

उत्तर

14

Duration ऑब्जेक्ट बनाने के लिए आप जिस विधि का उल्लेख करते हैं उसका उपयोग कर सकते हैं (या बस apply विधि का उपयोग करें)।

scala> val finite = Duration("3 seconds") 
scala> val infinite = Duration("Inf") 
scala> val fd = Some(finite).collect { case d: FiniteDuration => d } 
fd: Option[scala.concurrent.duration.FiniteDuration] = Some(3 seconds) 
scala> val id = Some(infinite).collect { case d: FiniteDuration => d } 
id: Option[scala.concurrent.duration.FiniteDuration] = None 

आशा है कि यह मदद की: उसके बाद, आप हालांकि वहां आपके उपयोग के मामले के आधार पर कई वेरिएंट हैं जाँच कर सकते हैं अगर यह collect द्वारा एक FiniteDuration यह ing है (के बाद से FiniteDurationDuration की एक उप-प्रकार है),।

+2

उत्कृष्ट, धन्यवाद! आपकी टिप्पणी देखने से पहले मैंने यह किया: 'अवधि। ऐप्ली (myString) .asInstanceOf [FiniteDuration]' लेकिन इसका तात्पर्य है कि 'myString' हमेशा एक सीमित अवधि का संदर्भ देगा, इसलिए यह बुलेट प्रूफ नहीं है। – user2916547

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