您使用什么工具来使用Scala?在我的学习阶段,我使用了Scala REPL并使用TextMate攻击了一些代码并使用scalac
CLI编译它。但随着项目规模的扩大,需要更复杂的工具。
我知道Elipse,IntelliJ和Netbeans的Scala插件,我尝试了所有这些插件。最好的一个是恕我直言,但仍然远非完美。
我遇到的主要问题是缺乏自动完成功能。作为一个不那么先进的Scala编码器,我仍然不知道整个标准API,并且必须定期在Scaladoc和IDE之间切换。这感觉就像“杀死生产力”。但他们都无法自动完成方法论证。 (我听说方法参数不包含在编译的scala代码中,但是如何附加源代码来执行自动完成?)
另一个非常烦人的问题是构建过程。我正在使用Maven来构建我的Scala项目并管理它们的依赖项。但是,我必须进行全面重建以测试我的更改。也许我被Java世界中的日食增量重建所破坏,但这对我来说感觉像是一个大问题。
我非常喜欢Scala,并且在编码时感觉更多更有效率,但缺乏复杂的工具让我觉得更少生产力。两者似乎都自行取消了。
那么,我的问题是什么?我怀疑每个Scala程序员都使用好的vim
或emacs
以及scalac
来完成他们的工作。那么你使用什么工具?您开发了哪些工作流程,以便使用Scala语言加快开发速度?
通过自动完成方法参数来澄清我的想法。
val myList = "foo" :: "all your base" :: Nil
myList.partition(_.length > 3)
对于上面的代码,IntelliJ无法向我提供分区要求我必须传递() => Boolean
函数的信息。事实上,IntelliJ不会检查这种约束。我可以传递一个String
,IntelliJ不会在我编译之前表明我的错误。
答案 0 :(得分:15)
熟悉Scalac的命令行选项。
-deprecation
-Xprint:all
:通过编译器阶段观察代码进度,非常有用,可以查看应用的含义。-help
/ -X' /
- Y`列出所有选项。scalac的最新夜间版本包含一个bash完成文件,使这些文件更易于使用。
使用Javadoc完成方法( CTRL - 空格, CTRL - Q / Apple-J){{ 3}}
问题中示例的参数信息( CTRL - P )Screenshot
方法参数完成( CTRL - SHIFT - 空格)。 Screenshot
您需要将源或javadoc链接到IntelliJ中的依赖项以查看Javadoc。
它目前不会突出显示类型错误,因为复杂代码中仍有太多误报。不过这很快就会到来。
SBT保持编译器驻留,并分析类之间的依赖关系以允许增量重新编译。它还可以监视源文件的更改并自动触发重新编译和/或测试执行。
>~compile
我在Screenshot中配置了SBT和IntelliJ项目,您可以将其用作参考。
答案 1 :(得分:6)
在过去的六个月里,我每天都在使用Scala。我还在使用vim(和ctags来查找东西),还有Maven用于构建。在处理JRebel网络应用程序时,我已经从Lift获得了一些好的里程 - 它将在不重启服务器的情况下即时重新加载更改。
我花了一些时间研究IDE,但它真的很快就令人沮丧。我最初错过了许多Eclipse功能,但经过一段时间的调整后,我认为现在我的工作效率并没有那么低。
我听到一些声称NetBeans是Scala IDE的当前冠军,但我还没有亲手试过。
答案 2 :(得分:4)
一种简单的方法是使用离线编译器fsc。它维护信息的缓存,标准编译器将与fsc
(作为守护进程运行)对话,并在编译期间使用其缓存的信息,从而加快编译周期。
答案 3 :(得分:3)
答案 4 :(得分:2)
我担心你必须等待Scala变得坚如磐石。 十年前我和Java有同样的问题。情况更糟。
我也尝试了所有这些。对于Scala 2.7.7 IntelliJ是赢家,但对于Scala 2.8.0-SNAPSHOT Eclipse并不是那么糟糕。 在2.8.0发布后等待半年,然后再次检查。它应该变得可以忍受。
答案 5 :(得分:2)
使用Scala 2.8,请参阅this以获得更好的Maven性能。
答案 6 :(得分:2)
你应该尝试使用每晚Scala版本来尝试Netbeans 6.8。我非常满意使用这个IDE编程Scala。对于建筑,我有时也使用Ant。关于NB Scala插件的最好的事情是它快速且代码完成工作完美无瑕。
对于你给出的例子:NB给了我这个错误
代码完成:
答案 7 :(得分:0)
Eclipse Scala IDE现在相当成熟(截至3.0)。