2015-11-12 3 views
6

カスタムコードを書かずにStringをScalaのFiniteDurationに解析することはできますか?Scala FiniteDuration from String

生成しかしStringを受け入れcreate呼ばDurationの方法は、、がありDuration、さらにそれからFiniteDurationを作成するためにそれを使用する方法がわかりません。 DurationにはFiniteDurationのインスタンスを生成するファクトリメソッドがいくつかありますが、パラメータを生成するために文字列を解析する必要があることを示しています(そのシグネチャは長く、TimeUnitを想定しています)。

これらのタイプは、scala.concurrent.durationです。

ありがとうございます。

答えて

14

Durationオブジェクトを作成するために、またはapplyメソッドを使用するために、言及したメソッドを使用できます。 (FiniteDurationDurationのサブタイプであるため)、それはそれをINGのcollectによってFiniteDurationだ場合、あなたのユースケースに応じて、いくつかのバリエーションがありますがその後、あなたは、チェックすることができます。

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 

はそれが助け願っています。

+2

優秀、ありがとうございます!あなたのコメントを見る前に、私はこれを行いました: 'Duration.apply(myString).asInstanceOf [FiniteDuration]'しかし、これは 'myString'が常に有限の持続時間を参照することを意味しています。 – user2916547