对于下面的代码片段IDEA给出了一个警告,那future {None}
是多余的:为什么IDEA在返回Future of None时发出警告?
queryString match {
case Some(query) => ... // Do async call
case None => future { None }
}
是否有更好的可能性办呢?
对于下面的代码片段IDEA给出了一个警告,那future {None}
是多余的:为什么IDEA在返回Future of None时发出警告?
queryString match {
case Some(query) => ... // Do async call
case None => future { None }
}
是否有更好的可能性办呢?
您可以在不产卵封闭,使用Future.successful[T](result: T)
创建已确定未来的,所以也许Future.successful(None)
是你想要的。
由于期货已经独立于其类型参数区分成功和失败,但是,由于您的异步调用也可以省略Some
中的包装,因此您也可以通过Future.failed(new Exception("No query string"))
发信号通知失败。
我不知道IDEA的警告是在这种情况下有帮助。
你可能通过推动匹配下到未来沉默吧:
future {
queryString match {
case Some(query) => Some(computeResult(query))
case None => None
}
}
(或者更简单地:future { queryString.map(computeResult(_)) }
)
我想我解决了这个问题由我自己:我不需要一个选项封装在我的未来中,因为未来本身也可能失败,因此失败类似于无。
现在我只返回一个未来:
queryString match {
case Some(query) =>
//async Call which returns a Future without Option
case None => throw new Exception("Error")
}
抛出异常是一个非常重量级的,而不是总是处理缺失值非常理想的手段。 – 2013-02-16 17:57:19
但大多数教程中的期望似乎都是由Exceptions处理的。在这里看到:http://docs.scala-lang.org/sips/pending/futures-promises.html#functional_composition_and_forcomprehensions – Tyde 2013-02-17 00:32:58
一个'未来的[选项[T]]'可以返回'成功(无)'表示“没事就去处理不当,但你想要的价值不在那里“。 – 2013-02-17 14:25:52