2015-11-12 8 views
6

Ist es möglich, eine String in eine FiniteDuration in Scala zu analysieren, ohne benutzerdefinierten Code zu schreiben?Scala FiniteDuration von String

Es gibt eine Methode auf Duration, genannt create, die ein String akzeptiert jedoch, dass ein Duration und nicht sicher produziert, wie sie weiter verwenden, um ein FiniteDuration daraus zu erstellen. Es gibt ein paar Factory-Methoden auf Duration, die FiniteDuration Instanzen produzieren, aber diese implizieren, dass ich meine Zeichenfolge parsen muss, um ihre Parameter zu erzeugen (ihre Signatur erwartet eine lange und eine TimeUnit).

Diese Typen sind scala.concurrent.duration.

Vielen Dank.

Antwort

14

Sie können die von Ihnen erwähnte Methode verwenden, um ein Objekt Duration zu erstellen (oder verwenden Sie einfach die Methode apply). Dann können Sie überprüfen, ob es eine FiniteDuration von collect ist es ing (seit FiniteDuration ein Untertyp von Duration ist), obwohl es mehrere Varianten sind je nach Anwendungsfall:

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 

Hoffe, es half.

+2

Ausgezeichnet, danke! Bevor ich deinen Kommentar gesehen habe, habe ich folgendes gemacht: 'Duration.apply (myString) .asInstanceOf [FiniteDuration]' aber das bedeutet, dass 'myString' immer auf eine endliche Dauer verweist, also nicht kugelsicher ist. – user2916547