加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在Scala中解释=>的序列?

发布时间:2020-12-16 10:04:14 所属栏目:安全 来源:网络整理
导读:我目前正在开始使用play框架,但我的 Scala知识还不够. 据我所知,=表示IsAuthenticated具有某种函数作为参数. 我发现了f:= String …是一个没有输入值的函数.但是如何用3 =来解释整行呢? ? 更进一步说,第二行中究竟发生了什么= = F(用户)(请求)?用户和请
我目前正在开始使用play框架,但我的 Scala知识还不够.

据我所知,=>表示IsAuthenticated具有某种函数作为参数.
我发现了f:=> String …是一个没有输入值的函数.但是如何用3 =>来解释整行呢? ?
更进一步说,第二行中究竟发生了什么= => F(用户)(请求)?用户和请求对象的目标函数是什么?

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

解决方法

=> String => Request[AnyContent] => Result

添加了parens更容易阅读:

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

你可以在REPL中试试这个.例如:

scala> def foo(f: => String => Int => Char): Char = f("abcdefgh")(4)
foo: (f: => String => (Int => Char))Char

在这个例子中,f是一个nullary函数call-by-name参数,它返回一个函数(让我们调用那个函数g). g是一个接受String参数并返回另一个函数(h)的函数. h是一个接受Int参数并返回Char的函数.

示例调用:

scala> foo { s: String => { i: Int => s.charAt(i) } }
res0: Char = e

让我们在评估时遍历方法体中每个表达式的类型:

> f

>类型:String => (Int => Char)
>价值:{s:String => {i:Int => s.charAt(i)}}

> f(“abcdefgh”)

>类型:Int =>烧焦
>价值:{i:Int => “abcdefgh”.charAt(i)}

> f(“abcdefgh”)(4)

>类型:Char>价值:’e’

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读