В playframework запросы обрабатываются Actions
. Когда вы вызываете Action { ... }
, вы фактически вызываете play.api.mvc.Action
вспомогательный объект для создания Action
значений.
object Action extends ActionBuilder[Request] { ... }
Если вы присмотритесь к Action
объекту, он распространяется на play.api.mvc.ActionBuilder
черту Эта черта содержит различные overloaded
apply
методы, которые создают Action
значения. Поэтому, когда вы вызываете Action{ ... }
, вы фактически вызываете Action.apply({...})
, и этот метод apply
наследуется от черты ActionBuilder
. Если вы посмотрите на черту ActionBuilder
, вы увидите различные функции высшего порядка apply
.
Теперь в вашем случае, def count = Action { Ok(counter.nextCount().toString) }
Вы на самом деле вызываете метод apply
с содержимым по умолчанию и без параметра запроса.
final def apply(block: => Result): Action[AnyContent] = apply(_ => block)
Это означает, что вы предоставляете блок { Ok(counter.nextCount().toString) }
, который возвращает Ok
Результат.
Какое содержание готовит Бетвен? Что означают фигурные скобки в этом контексте?
Когда вы делаете Action { Ok(counter.nextCount().toString) }
, вы фактически вызываете:
Action.apply(Ok(counter.nextCount().toString))
В scala метод apply
является фабричным методом, и поэтому вам не нужно по существу вызывать метод apply, поэтому вы также можете выполнить Action(Ok(counter.nextCount().toString))
. Кроме того, если ваша функция принимает только один параметр, вы можете заменить ()
скобки на фигурные скобки {}
. то есть вы можете сделать Action{Ok(counter.nextCount().toString)}
.
Я бы посоветовал взглянуть на функциональные литералы, функции более высокого порядка, параметр по имени, метод каррирования и т. Д. Так, чтобы вы имели более полное представление об этом.