play / scala,隐含请求=>什么意思?

时间:2016-10-25 06:23:26

标签: scala playframework

大部分播放框架我都看到了代码块

// Returns a tasks or an 'ItemNotFound' error
def info(id: Long) = SecuredApiAction { implicit request =>
  maybeItem(Task.findById(id))
}

是的,我的理解是定义一个方法info(id: Long),并在scala doc中创建scala中的函数,语法如下所示:

def functionName ([list of parameters]) : [return type] = {
   function body
   return [expr]
}

您能否告诉我在implicit request =>

之前SecuredApiAction{的含义是什么?

1 个答案:

答案 0 :(得分:7)

play.api.mvc.Action具有处理请求和返回结果的辅助方法。 One if it's apply overloads accepts a play.api.mvc.Request parameter

def apply(request: Request[A]): Future[Result]

通过将请求参数标记为implicit,您允许隐式要求参数的其他方法使用它。它还在Play Framework documentation中说明了

  

将请求参数标记为隐式通常很有用   被其他需要它的API隐式使用。

如果您自己创建了一个方法,并且如果它的参数是隐式的,则标记为:

object X {
  def m(): Unit = {
    implicit val myInt = 42
    y()
  }

  def y()(implicit i: Int): Unit = {
    println(i)
  }
}

由于范围内有implicit,因此在调用y()时,myInt变量将隐式传递给方法。

scala> :pa
// Entering paste mode (ctrl-D to finish)

object X {
  def m(): Unit = {
    implicit val myInt = 42
    y()
  }

  def y()(implicit i: Int): Unit = {
    println(i)
  }
}

// Exiting paste mode, now interpreting.

defined object X

scala> X.m()
42