1

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
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 に答える