4

嗨,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]                                                                                                     ^  
4

1 回答 1

6

错误信息有点混乱——它实际上是指 ActionBuilder 的类型参数。你需要的是一个类型函数(或者更具体地说,一个部分类型的应用程序)。这在 Scala 中有点棘手。Scala 2.8 语言参考实际上说你不能这样做,但这不再是真的了。试试这个:

def LocateResource[A,K](itemId: Int, v: List[K],
                        forceOwners:Boolean = true) =
  new ActionBuilder[({type λ[B] = NodeRequest[B,K]})#λ]() {
于 2013-10-13T12:54:08.210 回答