创建一个简单的Iteratee会给出类型错误?

时间:2014-06-08 23:31:10

标签: scala playframework-2.0 read-eval-print-loop fold iterate

我试图在基于this的REPL上使用Play2创建一个简单的Iteratee。但我收到missing parameters错误。但是,如果我为ele提供类型参数,它就可以工作。有人可以解释一下吗?

scala> import play.api.libs.iteratee._
import play.api.libs.iteratee._

scala> import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.ExecutionContext.Implicits.global

scala> val i = Iteratee.fold(0){ ( acc, ele ) => acc + ele }
<console>:15: error: missing parameter type
       val i = Iteratee.fold(0){ ( acc, ele ) => acc + ele }
                                         ^
scala> val i = Iteratee.fold(0){ ( acc, ele:Int ) => acc + ele }
i: play.api.libs.iteratee.Iteratee[Int,Int] = play.api.libs.iteratee.ContIteratee@3feaaa9b

1 个答案:

答案 0 :(得分:2)

Scala的类型推断不够聪明,不能说“哦,你写了acc + ele我知道acc是一个整数,所以ele也必须是一个整数”。 / p>

在上下文中,您通常不需要额外的类型注释。例如,这编译得很好:

Enumerator(1, 2, 3).run(Iteratee.fold(0) { (acc, ele) => acc + ele })

或者这个:

val i: Iteratee[Int, Int] = Iteratee.fold(0) { (acc, ele) => acc + ele }

但是如果没有一些额外的背景,你只需要提供: Int