这里使用什么语言构造来创建Action实例?我认为在Scala中可以使用:
实例化一个类new Action(params)
apply()
方法(通常调用构造函数):Action(params)
但是在Scaladoc of Play中!行动见以下摘录:
val echo = Action { request =>
Ok("Got request [" + request + "]")
}
这里叫什么?我知道我们创建函数request => response
,但这个函数在哪里传递?
答案 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()方法。