Play的实例化!行动 - 那是什么语言结构?

时间:2013-06-15 15:50:55

标签: scala

这里使用什么语言构造来创建Action实例?我认为在Scala中可以使用:

实例化一个类
  • 直接构造函数调用:new Action(params)
  • 调用随播对象的apply()方法(通常调用构造函数):Action(params)

但是在Scaladoc of Play中!行动见以下摘录:

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

这里叫什么?我知道我们创建函数request => response,但这个函数在哪里传递?

3 个答案:

答案 0 :(得分:5)

你的例子相当于:

val echo = Action.apply(request => Ok("Got request [" + request + "]"))

所以你实际上是在调用对象Action的{​​{1}}方法,并传递一个匿名函数。

请注意,在Scala中,您通常可以互换括号和大括号,例如如果你有这个功能

apply

这些电话是等效的:

def f(a: Int) = a + 42

接下来发生的事情是您可以省略f(23) f { 23 } 方法的名称。所以如果你有这样一个对象:

apply

这些电话都是等效的:

object f { def apply(a: Int) = a + 42 }

答案 1 :(得分:2)

基本上,您正在调用Action伴侣对象的apply方法。正如安德烈亚斯在方法调用中所指出的那样()可以被{} AFAIK替换。

api doc Action object

def apply(block: (Request[AnyContent]) ⇒ Result): Action[AnyContent]

Action是ActionBuilder的子类。它转到播放框架工作源代码中的this method调用。

答案 2 :(得分:0)

对于上述所有内容,对于CTRL +单击IDE中的类/方法名称并查看源代码也很有用。这有时会澄清很多。 请尝试在ActionBuilder类中看到3或4种不同的apply()方法。