be_*_*_mi 4 scala playframework-2.0
我目前正在开始使用play框架,但我的Scala知识还不够.
据我所知=>表示IsAuthenticated有一些函数作为参数.我发现了f:=> String ...是一个没有输入值的函数.但是如何用3 =>来解释整行?更进一步说,第二行中究竟发生了什么=> f(用户)(请求)?用户和请求对象的目标函数是什么?
def IsAuthenticated(f: => String => Request[AnyContent] => Result) = Security.Authenticated(username, onUnauthorized) { user =>
Action(request => f(user)(request))
}
Run Code Online (Sandbox Code Playgroud)
=> String => Request[AnyContent] => Result
Run Code Online (Sandbox Code Playgroud)
添加了parens更容易阅读:
=> (String => (Request[AnyContent] => Result))
Run Code Online (Sandbox Code Playgroud)
你可以在REPL中试试这个.例如:
scala> def foo(f: => String => Int => Char): Char = f("abcdefgh")(4)
foo: (f: => String => (Int => Char))Char
Run Code Online (Sandbox Code Playgroud)
在这个例子中,f是一个nullary函数 call-by-name参数,它返回一个函数(让我们调用那个函数g).g是一个接受String参数并返回另一个函数(h)的函数.h是一个接受Int参数并返回Char的函数.
示例调用:
scala> foo { s: String => { i: Int => s.charAt(i) } }
res0: Char = e
Run Code Online (Sandbox Code Playgroud)
让我们在评估时遍历方法体中每个表达式的类型:
f
String => (Int => Char){ s: String => { i: Int => s.charAt(i) } }f("abcdefgh")
Int => Char{ i: Int => "abcdefgh".charAt(i) }f("abcdefgh")(4)
Char'e'| 归档时间: |
|
| 查看次数: |
325 次 |
| 最近记录: |