1

我正在尝试基于在 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
4

1 回答 1

2

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

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

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.

于 2014-06-08T23:48:50.737 回答