2012-10-21 176 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)