2015-11-12 17 views
6

È possibile analizzare uno String in uno FiniteDuration in Scala senza scrivere codice personalizzato?Scala FiniteDuration da String

C'è un metodo su Duration, chiamato create, che accetta un String, tuttavia, che produce un Duration e non è sicuro come utilizzare ulteriormente per creare un FiniteDuration da esso. Esistono alcuni metodi di fabbrica su Duration che producono istanze , ma quelli implicano che devo analizzare la mia stringa per produrre i loro parametri (la loro firma si aspetta da tempo e uno TimeUnit).

Questi tipi che cito sono da scala.concurrent.duration.

Grazie.

risposta

14

È possibile utilizzare il metodo menzionato per creare un oggetto Duration (o semplicemente utilizzare il metodo apply). Quindi, è possibile verificare se si tratta di un FiniteDuration da collect ing esso (dal FiniteDuration è un sottotipo di Duration), anche se ci sono diverse varianti a seconda del caso d'uso:

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 

Speranza ha aiutato.

+2

Eccellente, grazie! Prima di vedere il tuo commento ho fatto questo: 'Duration.apply (myString) .asInstanceOf [FiniteDuration]' ma questo implica che 'myString' farà sempre riferimento a una durata finita, quindi non è a prova di proiettile. – user2916547