Scala 为什么用于理解的展开future via的结果类型是future?

Scala 为什么用于理解的展开future via的结果类型是future?,scala,future,Scala,Future,我的代码: val f1 = Future[String] { "ok1" } val fRes: Future[String] = for { r <- f1 } yield r for和yield的组合不会“打开”未来的。 实际上,这是一件好事 因此,每一种选项,尝试,列表,或者像人们所说的那样,应用函数都以这种方式保持它的类型 由于此属性,您可以在{ //我在这里“打开包装” (i*i)toString } val x:选项[]=用于{ 我在这里看一下如何使用期货:用于理解的r内部

我的代码:

val f1 = Future[String] { "ok1" }
val fRes: Future[String] = for { r <- f1 } yield r

for
yield
的组合不会“打开”未来的
。
实际上,这是一件好事

因此,每一种
选项
尝试
列表
,或者像人们所说的那样,应用函数
都以这种方式保持它的类型

由于此属性,您可以在{ //我在这里“打开包装” (i*i)toString } val x:选项[]=用于{
我在这里看一下如何使用期货:用于理解的
r
内部是一个
String
,但您产生的
r
是一个
Future[String]
。阅读@RobertUdah链接的页面是一个好主意,这样可以了解什么是
未来
。理解的方法就是
flatMap
s+
map
。在你的例子中,{r)的
语法,所以你最终得到同样的
未来[String]是合乎逻辑的
您从开始。您不会得到字符串,因为for construction不会阻止等待将来完成。
val fRes = for { r <- Await.result(f1, Duration(1, TimeUnit.SECONDS)) } yield r
val x: Option[_] = Some(5).map{ i => 
  // i is "unwrapped" here 
  (i * i).toString  
}

val x: Option[_] = for {
  i <- Some(5)
} yield i.toString // i unwrapped for the for comprehension but will keep Option type