【发布时间】:2012-04-05 12:00:52
【问题描述】:
你好,堆栈溢出,
我希望你能帮助我解决我的第一个问题:)
所以我遇到了 Scala 类型推断的问题。代码如下:
object Problem {
def ok(fn: (String) => Unit) = fn("")
// type mismatch; found: java.lang.String("") required: String
def fail[String](fn: (String) => Unit) = fn("")
}
Scala 在这里期望什么样的字符串?
请注意,这是解释我的问题的最小示例。当我尝试实现更复杂的接口(确切地说是 Play 的 Iteratee)时,出现了最初的问题,所以,不,省略 [String] 不是一个选项。 (如果有人认为实际代码会有所帮助,我会提供。)
我试过def fail[java.lang.String] ...,但它显示expected ], found .。
我确实阅读了Scala String vs java.lang.String - type inference,它很好地解释了java.lang.String 与scala.Predef.String,但我仍然无法针对我的具体问题提出解决方案。
有什么想法吗?
编辑:所以这是我尝试实现http://www.playframework.org/documentation/api/2.0/scala/play/api/libs/iteratee/Iteratee.html的最初尝试,只是我写了String而不是T。 (使用T 可以编译,这很有意义!)我的失败;显然我对所有类型参数有点不知所措:
val stream = WS.url("url").get({ headers =>
(new Iteratee[Array[Byte], String] {
def fold[T](done: (String, Input[Array[Byte]]) => Promise[T],
cont: (Input[Array[Byte]] => Iteratee[Array[Byte], String]) => Promise[T],
error: (String, Input[Array[Byte]]) => Promise[T]): Promise[T] =
{
done("something", Input.Empty)
}
})
})
问候, 亨德里克
【问题讨论】:
标签: scala generics type-inference