类扩展参数中的函数定义?

时间:2017-11-03 19:07:14

标签: scala inheritance subclass

this part of Play Framework documentation中,我找到了以下代码行:

object Authenticated extends AuthenticatedBuilder(req => getUserFromRequest(req))

困扰我的部分是eq => getUserFromRequest(req))。为什么超类中有一个函数定义'参数?它是否应该只保留应该由子类继承的超类中的参数?

1 个答案:

答案 0 :(得分:1)

在Scala中,函数是第一类元素,这意味着它们可以作为参数传递并作为函数结果返回。

source file我们看到AuthenticatedBuilder需要两个构造函数参数,它们都是函数。

class AuthenticatedBuilder[U](userinfo       : RequestHeader => Option[U]
                             ,onUnauthorized : RequestHeader => Result =
                   _ => Unauthorized(views.html.defaultpages.unauthorized())
                             ) extends ActionBuilder[...] { ...

在您引用的示例中,只提供了一个参数,因为第二个参数具有默认值。