gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:07:45 25 4
gpt4 key购买 nike

我目前开始使用 play 框架,但我的 Scala 知识还不够。

据我所知, => 表示 IsAuthenticated 具有某种功能作为参数。
我还发现 f: => String... 是一个没有输入值的函数。但是我如何用它的 3 => 解释完整的行?
再往下看,第二行 => f(user)(request) 到底发生了什么?用户和请求对象的目标函数是什么?

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

最佳答案

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

添加括号更容易阅读:
=> (String => (Request[AnyContent] => Result))

您可以在 REPL 中尝试此操作。例如:
scala> def foo(f: => String => Int => Char): Char = f("abcdefgh")(4)
foo: (f: => String => (Int => Char))Char

在此示例中,f 是返回函数的空函数按名称调用参数(让我们调用该函数 g)。 g 是一个函数,它接受一个字符串参数并返回另一个函数 (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 => Char
  • 值:{ i: Int => "abcdefgh".charAt(i) }
  • f("abcdefgh")(4)
  • 类型:Char
  • 值:'e'
  • 关于scala - 如何解释 Scala 中的 => 序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18175290/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com