dre*_*der 36 java scala playframework-2.0
我正在考虑在游戏1.2之后迁移到2.0.困扰我的一件事是人们说Scala对于Play 2.0应用来说更"首选".我知道1.2和2.0之间的差异,但我不确定Play 2.0与Java和Play 2.0与Scala之间是否存在差异
所以我脑子里有些问题:
kap*_*pex 25
我刚刚使用Play 2.0和Java完成了一个原型,现在我正在考虑学习Scala,所以我可以切换到它进行进一步的开发.
这不仅仅是通常的Java与Scala讨论 - 我在Play框架中看到的问题是它将Scala成语强加到Java上.有关调用多个Web服务的文档中的示例:
public static Result feedComments(String feedUrl) {
return async(
WS.url(feedUrl).get().flatMap(
new Function<WS.Response, Promise<Result>>() {
public Promise<Result> apply(WS.Response response) {
return WS.url(response.asJson().findPath("commentsUrl").get().map(
new Function<WS.Response, Result>() {
public Result apply(WS.Response response) {
return ok("Number of comments: " + response.asJson().findPath("count"));
}
}
);
}
}
)
);
}
Run Code Online (Sandbox Code Playgroud)
它工作但看起来不像传统的Java.那些括号看起来很吓人.即使Eclipse感到困惑,也不知道我需要或想要使用哪些泛型 - 我总是必须手动选择它们.
另请注意,在文档中,通过删除@Override注释,使用两个空格进行缩进,整体选择一个非常简单的示例而不进行验证或错误恢复,因此它们看起来非常漂亮,因此它们不会使用太多行.我甚至不确定你是否可以配置代码格式化程序来输出它,而不会完全搞乱其他代码.
在实践中,我最终得到了一个可怕的Java-Scala憎恶块,只是为了从另一个服务中获取一些数据.
不幸的是,我找不到任何在Scala中组合响应的示例.至少在Scala中调用单个Web服务看起来更短更容易阅读.
nde*_*rge 12
AFAIK,最好与Scala一起使用,因为它提供了更多的功能.
例如(如果我错了,请纠正我),你可以直接使用带有Scala 的Iteratees(也就是反应式编程),但我不知道如何用Java实现它.
此外,Play的Java API是Play架构的上层,核心是用Scala编写的; 因此,如果您想要了解内部发生的事情,请使用Scala.
另请注意,您可以在同一个Play项目中混合使用Java和Scala,这样您就可以顺利地移动到Scala.