2015-09-21 35 views
0

我有以下代码:SCALA - 表达(为{}收率x)是类型未来[未来[..]]代替预期未来[..]

val futureWithResult = for{files <- scanFiles(dir) 
          res <- procFiles(files)}yield res 

RES是Future[...]类型的,为什么这个声明返回Future[Future[..]] ?? 在我的程序中,我需要futureWithResult为Future[...]。为什么我的收益代码将res的类型包装到另一个Future[]

+0

scanFiles和procFiles方法的返回类型是什么? –

+0

scanFiles - Seq [String] procFiles - Future [Seq [(String,Int)]] [。 。 。]在我的问题代表类型Seq [(String,Int)] – DorianOlympia

+0

@DorianOlympia,给定类型'scanFiles:Seq [String]'和'procFiles:Future [Seq [(String,Int)]]'你不能写一个理解,因为'scanFiles'的'flatMap'需要一个'GenTraversableOnce'值,而未来值不是。因此,你的代码不应该编译。 –

回答

0

我找到了答案。问题的确是错误的类型(准确地说,与水库类型有关)。它是Future[Seq[(String, Int)]]而不是Seq[(String, Int)]问题在于我错误地将procFiles(它返回Future [...])包装到另一个Future中。谢谢各位的评论!

+0

你可以接受你自己的答案,以防止他人不必要地做出这些。 –