Подтвердить что ты не робот

Неявное ключевое слово перед параметром в анонимной функции в Scala

Я понимаю неявные параметры и неявные преобразования в Scala, но я впервые увидел это сегодня: неявное ключевое слово перед параметром в анонимной функции:

Action { implicit request =>
  Ok("Got request [" + request + "]")
}

Что здесь подразумевает ключевое слово?

Есть ли ресурсы в Интернете, которые больше описывают, что такое вариант использования?

4b9b3361

Ответ 1

Здесь есть две различные функции.

Во-первых, request не является аргументом в вызове метода. Это аргумент анонимной функции. Сама анонимная функция является аргументом вызова метода.

Во-вторых, объявление неявного аргумента в анонимной функции имеет удобство сохранения вас от "принудительного" значения val в неявное:

Action { request =>
  implicit val r = request
  Ok("Got request [" + request + "]")
}

Я знаю, что это код платформы Play, но я не уверен, что такое подписи для Action и Ok. Я угадаю, что они что-то вроде этого:

def Action(r:Request => Result):Unit
case class Ok(str:msg)(implicit r:Request)

Опять же, это чистое угадывание только для иллюстративных целей.

Ответ 3

В моем понимании ключевое слово Implicit означает Пусть complier выполняет задание

Объявление неявной переменной означает, что она может использоваться для неявного параметра других методов внутри области. Другими словами, переменная рассматривается компилятором для заполнения неявных параметров.

 def index = Action { implicit request =>
    val str = sayHi("Jason")
    Ok(views.html.index("Your new application is ready." + str))
  }

  private def sayHi(name: String)(implicit req: Request[AnyContent]) = name + ", you can the following content" + req.body

Объявляю неявный параметр req в sayHi с типом Request[AnyContent], однако я могу вызвать метод только с первым параметром sayHi("Jason"), потому что неявный параметр req заполненный компилятором для ссылки на неявную переменную request