2012-10-21 180 views
4

我是Scala和Play Framework的新手,我以前从未见过以下参数类型。Scala参数类型说明

def IsAuthenticated(f: => String => Request[AnyContent] => Result) 

什么是困惑我的是f: =>一部分。如果=>不在那里,我会认为它是一个函数,它将String映射到Request,然后映射到Result

回答

8

一般而言,=> A是A类型的名称参数。这意味着该参数仅在函数主体中使用时才会被计算,如果以及何时(以及每次)。因此,f是一个按名称参数,其类型是一个函数,它需要String并将函数从Request[AnyContent]返回到Result。这里是一个如何通过名称参数进行评估的例子:

scala> def twice[A](a: =>A) = (a,a) 
twice: [A](a: => A)(A, A) 

scala> var i = 0 
i: Int = 0 

scala> twice { 
    | i += 1 
    | i 
    | } 
res0: (Int, Int) = (1,2)