2015-05-21 90 views
1

作为一个新的斯卡拉,有人可以解释一下the code here玩框架斯卡拉动作

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

所以我得到的,你会创建一个名为回声新的价值,从一个动作特点(从我可以收集类似于Java接口)。 request是某种说法,尽管我从未见过这种语法 - 括号和箭头=>意味着什么?

我看到我创建了一个Result对象,表示200响应,并且推测返回该响应。但是我从哪里返回?一个构造函数?

回答

2

首先,新的价值回波从调用函数Action.apply,其中Action是一个对象(单身阶,排序的相关静在Java中)的结果获取其值。

Action.apply函数显然需要一个函数作为它的参数,并按照约定返回一个Action类型的值。

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

是从某种类型(参数标记request)某些类型(调用的返回到Ok)的功能。

假设您来自Java背景,Java 8 lambda使用非常类似的语法。

+0

动作似乎是一个特质(https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/play/api/mvc/Action.scala)?所以当你编写'Action [some func]'时,你实际上正在对该函数调用'Action.apply'? – wrongusername

+0

在你链接的文件中有'object Action extends ActionBuilder [Request]'和'Trait ActionBuilder [+ R [_]]'有一个'apply'方法,该方法需要'BodyParser'来扩展'Function1'。在Scala中,通常为特征和类设置一个“伴随对象”,这些特征和类将保存将会进入类中的静态成员/方法的东西。在这种情况下是工厂方法。在scala中,如果你调用像“foo(stuff)”这样的对象,它只是“foo.apply(stuff)”的语法糖“ –

+0

啊我明白了,现在有很多意义,谢谢! :) – wrongusername

1

一个Action是一个接受请求并产生结果(响应)的函数。在{}的表达式中,您可以使用函数文字(匿名函数)request => Ok()。因此,request将在=>后的机构内可用。

由于这是Scala,评估表达式的最后一位将是结果;也就是Ok()里面会被评估,然后你的结果会被生成。