各位Scala开发人员,
任何人都可以在以下代码中向我解释类型推断出什么问题以及如何解决。
以下代码是使用Scala 2.10.2的Play 2.2的自定义操作
class Test {
trait Entity
class NodeRequest[A,K <:Entity](val entity: K,
val request: Request[A])
extends WrappedRequest[A](request)
def LocateResource[A,K](itemId: Int, v: List[K],
forceOwners:Boolean = true) =
new ActionBuilder[NodeRequest[A,K]]() {
def invokeBlock[A](request: Request[A],
block: (NodeRequest[A,K]) => Future[SimpleResult]) = {
Future.successful(Ok)
}
}
[error] Test.this.NodeRequest[A,K] takes no type parameters, expected: one
[error] def LocateResource[A,K](itemId: Int, v: List[K] , forceOwners:Boolean = true) = new ActionBuilder[NodeRequest[A,K]]() {
[error] ^
错误消息有点令人困惑-它实际上是指ActionBuilder的类型参数。您需要的是类型函数(或更具体地说,是部分类型应用程序)。在Scala中这有点棘手。实际上,Scala 2.8语言参考说您无法做到这一点,但事实已不再如此。尝试这个:
def LocateResource[A,K](itemId: Int, v: List[K],
forceOwners:Boolean = true) =
new ActionBuilder[({type λ[B] = NodeRequest[B,K]})#λ]() {
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句