我试图在基于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
答案 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
。