Scala类型错误 - 没有类型参数,预期:一个

Ali*_*ehi 4 scala playframework-2.0

嗨其他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]                                                                                                     ^  
Run Code Online (Sandbox Code Playgroud)

Rob*_*een 5

错误消息有点令人困惑 - 它实际上是指ActionBuilder的类型参数.您需要的是类型函数(或更具体地,部分类型的应用程序).这在Scala中有点棘手.Scala 2.8语言参考实际上说你做不到,但事实并非如此.试试这个:

def LocateResource[A,K](itemId: Int, v: List[K],
                        forceOwners:Boolean = true) =
  new ActionBuilder[({type ?[B] = NodeRequest[B,K]})#?]() {
Run Code Online (Sandbox Code Playgroud)