2012-03-27 48 views
5

有人能解釋特質擔保playframework示例應用程序zentask的使用Scala代碼:Scala函數中的參數列表。有人可以解釋代碼嗎?

def IsAuthenticated(f: => String => Request[AnyContent] => Result) = Security.Authenticated(username, onUnauthorized) { user => 
Action(request => f(user)(request)) 
} 

我剛開始學習Scala和不能找出這個序列f: => String => Request[AnyContent] => Result。這是什麼意思?在使用幾個=>代替函數參數列表的手冊中找不到任何示例。

我錯過了什麼?

+0

[Scala Code demystify]的可能重複(http://stackoverflow.com/questions/8597028/scala-code-demystify) – Debilski 2012-03-27 23:36:11

回答

4

f功能,給定String會產生功能該等待Result[AnyContent]提供Result

然後,在第2行傳遞給fuser PARAM,它必須是一個String和你通過request PARAM到所得到的函數。

這種傳遞參數的方式叫做currying。一個短期和複雜一點的例子可以在那裏找到:http://www.scala-lang.org/node/135

7

也許如果你添加一些括號更容易:

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

fcall-by-name parameter;它是一個函數,它需要String並返回:函數需要Request[AnyContent]並返回Result

+0

謝謝。現在看來很清楚。 – Oleg 2012-03-27 14:31:37

相關問題