如何理解函数体中的类型而不是函数参数列表中的类型

时间:2014-06-14 08:41:43

标签: scala playframework

在Play框架中的Action.scala文件中,有以下功能:

  final def apply[A](bodyParser: BodyParser[A])
         (block: R[A] => Result): Action[A] 
         = async(bodyParser) { req: R[A] =>
    Future.successful(block(req))
  }

有以下部分:

  { req: R[A] =>
        Future.successful(block(req))
      }

如果在函数参数列表中:这意味着req是

的类型
   R[A] =>Future.successful(block(req))

但是它在block(req)中使用了req,所以看起来像递归。现在它不在参数列表中但在一个正文中,如何理解它?

1 个答案:

答案 0 :(得分:3)

不,req的类型为R [A] req:R [A] => Future.successful(block(req))是一个函数,它接受R [A]类型的对象并返回Future.successful(block(req))

示例:

def fun(param:Int=>String)=param(9)

声明一个将函数作为参数

的函数
def fun2 = fun({i:Int=>i.toString})

为实现的功能带来乐趣