4
我是Scala和Play Framework的新手,我以前从未见过以下参数类型。Scala参数类型说明
def IsAuthenticated(f: => String => Request[AnyContent] => Result)
什么是困惑我的是f: =>
一部分。如果=>
不在那里,我会认为它是一个函数,它将String
映射到Request
,然后映射到Result
。
我是Scala和Play Framework的新手,我以前从未见过以下参数类型。Scala参数类型说明
def IsAuthenticated(f: => String => Request[AnyContent] => Result)
什么是困惑我的是f: =>
一部分。如果=>
不在那里,我会认为它是一个函数,它将String
映射到Request
,然后映射到Result
。
一般而言,=> 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)