【问题标题】:Creating a simple Iteratee gives type error ?创建一个简单的 Iteratee 会产生类型错误?
【发布时间】:2014-07-29 12:01:52
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多