【问题标题】:How to become more productive using Scala? (Tools, IDEs)如何使用 Scala 提高生产力? (工具、IDE)
【发布时间】:2017-08-15 16:21:27
【问题描述】:

你们使用什么工具来使用 Scala?在我的学习阶段,我使用了 Scala REPL 并使用 TextMate 编写了一些代码,并使用 scalac CLI 编译了它。但随着项目规模的扩大,需要更复杂的工具。

我知道 Elipse、IntelliJ 和 Netbeans 的 Scala 插件,我都试过了。最好的是恕我直言 IntelliJ,但离完美还很远。

我遇到的主要问题是缺少自动完成功能。作为一个不那么高级的 Scala 编码器,我仍然不了解整个标准 API,并且必须定期在 Scaladoc 和 IDE 之间切换。这感觉就像“扼杀生产力”。但是它们都无法自动完成方法参数。 (听说编译的scala代码中不包含方法参数,但是附加源代码来自动完成呢?)

另一个非常烦人的问题是构建过程。我正在使用 Maven 构建我的 Scala 项目并管理它们的依赖项。但尽管如此,我必须进行完全重建以测试我的更改。也许我被 Java 世界中可用的 Eclipse 增量重建宠坏了,但这对我来说是个大问题。

我非常喜欢 Scala,并且在编码时感觉效率更高,但缺乏复杂的工具让我感觉效率低下。两者似乎都相互抵消了。

那么,我的问题是什么?我怀疑每个 Scala 程序员都使用良好的 vimemacs 以及 scalac 来完成他们的工作。那么你使用什么工具呢?您开发了哪些工作流程来加快使用 Scala 语言进行开发?

编辑

澄清我对自动完成方法参数的含义。

val myList = "foo" :: "all your base" :: Nil
myList.partition(_.length > 3)

对于上面的代码,IntelliJ 未能向我提供分区要求我必须传递 () => Boolean 函数的信息。事实上,IntelliJ 不会检查这个约束。我可以通过 String 并且 IntelliJ 在我进行编译之前不会指示我的错误。

【问题讨论】:

  • NB Scala 插件的最大优点是速度快,代码补全完美无瑕,所以我很满意。您觉得 IntelliJ 的哪个功能更好?我无法让它工作,所以放弃了尝试。

标签: scala workflow


【解决方案1】:

scalac

熟悉 Scalac 的命令行选项。

  • -deprecation
  • -Xprint:all:通过编译器阶段观察您的代码进度,这对于查看应用了哪些隐式非常有用。
  • -help / -X' /-Y` 列出所有选项。

scalac 的最新夜间版本包括一个 bash 完成文件,使这些更易于使用。

IntelliJ 理念

使用 Javadoc 完成方法(CTRL-SpaceCTRL-Q/Apple-J)@987654321 @

问题中示例的参数信息 (CTRL-P) Screenshot

方法参数完成(CTRL-SHIFT-Space)。 Screenshot

您需要将源代码或 javadocs 链接到 IntelliJ 中的依赖项中才能查看 Javadoc。

它目前不会即时突出显示类型错误,因为复杂代码中仍然存在太多误报。不过,这即将到来。

简单的构建工具

SBT 保持编译器常驻,并分析类之间的依赖关系以允许增量重新编译。它还可以监视源文件的更改并自动触发重新编译和/或测试执行。

  • 持续编译:>~compile
  • 持续编译+测试:~test-quick

我在http://github.com/scalaz/scalaz 中配置了 SBT 和 IntelliJ 项目,您可以以此作为参考。

【讨论】:

  • 您使用哪个版本的 IntelliJ 插件?
  • +1 IntelliJ(代码完成/IDE)+ SBT(构建)很容易成为 Scala 可用的最佳工具集。
  • 我正在使用 Scala 2.8 和插件 confluence.jetbrains.net/display/SCA/… 的夜间构建。它们并不总是完美的——目前正在发生一些重大的重构。
  • 接受了这个答案,因为:SBT 摇滚(以前没用过,非常棒的工具)并为我提供了有关从 IntelliJ 获得我可爱的方法参数完成的信息。尽管如此,我还是赞成所有其他 IHMO 有用的答案。
  • 很抱歉再次打扰...我无法让自动竞争工作。 :-/也许我可以得到一点提示在哪里看?链接到 Scaladoc 似乎不起作用,IntelliJ 到处都称它为 Javadoc... sigh
【解决方案2】:

在过去的六个月里,我每天都在使用 Scala。我仍在使用 vim(和 ctags 来查找东西)和 Maven 进行构建。在处理 Lift Web 应用程序时,我从 JRebel 获得了一些不错的成绩——它会在不重启服务器的情况下即时重新加载更改。

我花了一些时间研究 IDE,但它很快就变得令人沮丧。一开始我确实错过了很多 Eclipse 功能,但经过一段时间的调整后,我认为我现在的工作效率并没有明显降低。

我听说 NetBeans 是 Scala IDE 的当前冠军,但我还没有亲身体验过。

【讨论】:

  • +1 JRebel - 用编译语言克服了 RAD 的一大缺点
【解决方案3】:

一种简单的方法是使用离线编译器fsc。它维护信息缓存,标准编译器将与fsc(作为守护进程运行)通信并在编译期间使用其缓存信息,从而加快编译周期。

【讨论】:

    【解决方案4】:

    这是我对类似thread 的回答。在给Ensime 大约一个小时后。我就是忍不住要说出来。我必须说它是为 Emacs 包编写的非常非常好的。

    【讨论】:

      【解决方案5】:

      恐怕您必须等待 Scala 变得坚如磐​​石。 十年前我对 Java 也有同样的问题。情况更糟。

      我也都试过了。对于 Scala 2.7.7,IntelliJ 是赢家,但对于 Scala 2.8.0-SNAPSHOT,Eclipse 并没有那么糟糕。 等2.8.0发布后半年再检查。它应该变得可以忍受。

      【讨论】:

      【解决方案6】:

      对于 Scala 2.8,请参阅this 以获得更好的 Maven 性能。

      【讨论】:

        【解决方案7】:

        您还应该尝试使用 Nightly Scala 构建的 Netbeans 6.8。我对使用这个 IDE 编程 Scala 感到非常满意。对于构建,我有时也使用 Ant。 NB Scala 插件最棒的地方在于它速度很快,并且代码完成工作完美无缺。

        对于你给出的例子:NB给我这个错误

        代码完成:

        【讨论】:

          【解决方案8】:

          Eclipse Scala IDE 现在已经相当成熟了(从 3.0 开始)。

          【讨论】:

            猜你喜欢
            • 2010-11-20
            • 2013-04-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-30
            • 1970-01-01
            • 2015-01-12
            • 1970-01-01
            相关资源
            最近更新 更多