播放2.0 + Java与Play 2.0 + Scala?

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之间是否存在差异

所以我脑子里有些问题:

  • 在Play 2.0应用程序中有什么我不能用scala scala做的吗?
  • 如果我开始在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.

  • @dreampowder事实上,AFAIK,iteratees可能只是Java版本中缺少的一个特性,其他元素在两种语言中都非常可比.因此,如果您对Java更加熟悉,那么您可以继续使用Java,并仅将Scala用于缺失部分.如果您没有偏好......您需要检查自己哪种语言更适合您. (3认同)
  • 是的,你可以在同一个Play项目中混合使用Java和Scala,这样你就可以顺利地移动到Scala了 (2认同)