0

Ich habe folgendes Muster:Auswickeln Optional Wiedergabe Routenparameter In Comprehensions

  1. Einige spielen Route mit einigen optionalen Parameter definiert

GET/my/route controllers.something.Class.method (vielleichtA: Optional [Int], vielleichtB: Optional [Int])

In der Methode möchte ich diese Parameter verwenden können. Ich habe das Gefühl, dass ich das richtige Muster nicht verstehe. Was ich möchte, ist zu tun, so etwas wie:

blah match { 
    case Some(someCase) => // do something 
    case _ => for { 
     a <- maybeA 
     b <- maybeB 
    } yield { 
     somethingThatReturnsAFuture(a, b) 
    } 
} 

Das Problem ist, dass die für das Verständnis eines Option[Future[Int]] gibt, aber ich brauche es Future[Int] zurückzukehren. Ich würde gerne in der Lage sein, einfach eine get am Ende des Verständnisses zu werfen, aber das riecht komisch (und ich glaube eigentlich nicht, dass es möglich ist, einfach get am Ende des Verständnisses zu werfen).

Irgendwelche Vorschläge?

Antwort

0

Wenn etwas Option ist, dann wird das Ergebnis der direkten Verarbeitung Option sein. Die einzige Möglichkeit, Option loszuwerden, besteht darin, den None Fall zu definieren.

val resultOpt: Option[Future[Int]] = blah match { ... 
val result: Future[Int] = resultOpt match { 
    case Some(f) => f 
    case None => Future.successful(0) 
} 

Oder verwenden Sie einfach getOrElse. Die gleiche Code, unterschiedliche Art:

val resultOpt: Option[Future[Int]] = blah match { ... 
val result: Future[Int] = resultOpt.getOrElse(Future.successful(0)) 

Ein wenig mehr dazu: http://alvinalexander.com/scala/how-to-use-multiple-options-for-loop-comprehension