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

时间:2015-01-12 14:38:18

标签: scala playframework

任何人都可以帮我理解下面的scala语法吗?

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

here获取的语法。

我的理解是:withAuthAction,请求是匿名函数的输入。 但是我无法理解

  1. 两个右手操作员(=>
  2. 从哪里获得userId价值?
  3. userId也是匿名函数的输入参数吗?
  4. 由于

1 个答案:

答案 0 :(得分:1)

这只是一个匿名curried功能。带有单个参数的函数,返回带有单个参数的函数。

// 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.