你好堆栈溢出,DEF FN [字符串]似乎打破斯卡拉/ java.lang.String中的兼容性
我希望你能帮助我与我的第一个问题在这里:)
所以我m有一个Scala类型推断的问题。这里是代码:
object Problem {
def ok(fn: (String) => Unit) = fn("")
// type mismatch; found: java.lang.String("") required: String
def fail[String](fn: (String) => Unit) = fn("")
}
斯卡拉期望什么样的字符串?
请注意,这是解释我的问题的最小示例。当我试图实现一个更复杂的界面(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)
}
})
})
问候, 亨德里克
非常感谢,现在你说它...:| – Hendrik 2012-04-05 12:16:22
这个答案是正确的,我选择@ submonoid的,虽然我的方法的签名,我实际上不能改变工作。 – Hendrik 2012-04-05 12:18:58
@Hendrik - 就我所知,签名没有任何意义。你为什么不能改变它?签名必须是什么? (你可能会误解它是什么?) – 2012-04-05 12:29:37