Scala';s表示对未来[选项]的理解,无例外
我有一个未来的[Option[String]]函数。只有当future成功并且字符串存在时,我才需要得到一个转换后的字符串。在其他情况下,我只需要得到一个None(无任何错误或异常) 我尝试使用理解(以及贴图/平面贴图),但显然我的结果是键入Nothing而不是Option[String]Scala';s表示对未来[选项]的理解,无例外,scala,optional,future,for-comprehension,Scala,Optional,Future,For Comprehension,我有一个未来的[Option[String]]函数。只有当future成功并且字符串存在时,我才需要得到一个转换后的字符串。在其他情况下,我只需要得到一个None(无任何错误或异常) 我尝试使用理解(以及贴图/平面贴图),但显然我的结果是键入Nothing而不是Option[String] def getOption: Option[String] def getOptionResult: Future[Option[String]] def someActions: String val r
def getOption: Option[String]
def getOptionResult: Future[Option[String]]
def someActions: String
val resultO: Option[String] = for {
myString: String <- getOption
optionResult: Option[String] <- getOptionResult
result: String <- optionResult
} yield {
someActions(result)
}
def getOption:Option[String]
def getOptionResult:Future[选项[字符串]]
def someActions:String
val resultO:选项[字符串]=用于{
myString:String试试这个
import scala.concurrent._
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits.global
def getOptionResult: Future[Option[String]] = Future(Some("Foo"))
// def getOptionResult: Future[Option[String]] = Future(None)
val d = getOptionResult.map(a => a.map(r => "(" + r + ")"))
val res = Await.result(d, 100 nanos).getOrElse(None)
如果我正确理解您的需求。这将提供一个始终成功的未来,如果成功,其结果与getOptionResult
相同,如果失败,其结果与None
相同。请参阅
通常,您不希望在结果的左侧指定类型,它将不是字符串,而是io.Serializable在示例代码中,myString
的用途是什么?someActions()
的返回类型是什么?
getOptionResult.recover { case _ => None }