函数中有两个右手操作符的 Scala 语法

Scala syntax with two right hand operator in a function

谁能帮我理解下面的 scala 语法?

def index = withAuth {
  implicit request => userId =>
    Ok(views.html.app.index())
}

语法取自here

我的理解是:withAuth是一个Action,request是匿名函数的输入。 但是我看不懂

  1. 两个右手运算符(=>
  2. 它将从哪里接收 userId 值?
  3. userId也是匿名函数的输入参数吗?

谢谢

这只是一个匿名 curried 函数。单参数函数 returns 单参数函数。

// anonymous function that returns function:
implicit request => {
  val inner = userId: UserIdType => Ok(views.html.app.index())
  inner
}

// inline `inner` and use type inference for UserIdType:
implicit request => {
  userId => Ok(views.html.app.index())
}


// remove curly brackets for single expression result:
implicit request =>
  userId => Ok(views.html.app.index())

可以这样调用这样的函数:

curriedFunction(a)(b)

withAuth参数的类型是这样的RequestType => UserIdType => ResultType。它允许您以 implicit 的形式提出请求。 See this answer.