学习Scala作为第一个VM /编译语言 - 工作流程挑战

mma*_*tey 6 workflow scala intellij-idea sbt

我来自PHP/Python/Javascript背景,最近对Scala非常感兴趣 - 特别是来自网络立场的Akka.

我有一个非常困难的时间,虽然有一般的工作流程,与我所描述的解释语言相比的问题.

一般来说,我倾向于编码,测试结果,代码和重复.即使更改20行类中的单行需要30秒来编译和运行,这也会停滞不前.这真的很正常吗?我是否需要构建,构建,构建然后返回30分钟或一小时后编译/测试?

(我正在使用IDEA和SBT)我是否需要专门学习如何使用Maven而不是链接到回购?

思考?建议吗?

Jan*_*anx 8

我认为你与Idea和SBT走在了正确的轨道上.你有没有尝试过

~compile
Run Code Online (Sandbox Code Playgroud)

这将自动检测源的更改.对于Web应用程序,您可以执行此操作

jetty-run
Run Code Online (Sandbox Code Playgroud)

其次是

~prepare-webapp
Run Code Online (Sandbox Code Playgroud)

连续编译并将您的应用程序重新部署到码头.使Scala开发感觉很像Python Web开发.

通常我在编译时发现SBT非常快,特别是你正在谈论的大小文件.当我保存我的更改并转到我的SBT提示时,它就完成了.

另一个方便的SBT方面是REPL,它将加载您的项目及其依赖项:

console
Run Code Online (Sandbox Code Playgroud)

您可以使用重新加载任何已编译的更改

:replay
Run Code Online (Sandbox Code Playgroud)

在scala REPL中.

编辑:猜猜我应该提到你可以用一个简单的类与主方法玩.如果您创建一个名为src/main/scala/Foo.scala的文件,如下所示:

object Foo {
  def main(args: Array[String]) {
    println("Hello World")
  }
}
Run Code Online (Sandbox Code Playgroud)

和这样的文件项目/ build/Build.scala:

import sbt._
class Build(info: ProjectInfo) extends DefaultProject(info) {
  override def mainClass = Some("Foo")
}
Run Code Online (Sandbox Code Playgroud)

然后在sbt提示符下,你可以做到

~run
Run Code Online (Sandbox Code Playgroud)

连续编译并运行Foo.main方法.您可能需要先在sbt中执行"重新加载".从保存更改到看到输出似乎需要2-3秒.然后你只需编辑,保存并查看更改.这是一个非常好的工作流程.

另外,不要忘记REPL - 绝对是学习Scala的重要工具.你可以通过互动方式学习它.


bak*_*kal 5

IDE帮助:

使用静态类型语言,我发现自己在工作流程方面的工作量少于动态类型,但这只是因为优秀的IDE帮助(键入信息可以提前检测错误,并在编辑时提供准确的建议),所以它确实在你描述的代码测试循环中节省了一些时间.

但是,IDEA中的Scala IDE支持还没有达到Java的水平,例如在编辑(IMHO)时捕获错误和编译速度.

REPL /脚本支持:

不要忘记您仍然可以使用Scala REPL,工作流程与您在Python中习惯的工作流程非常相似.

IDEA + Scala速度:

有关IDEA + Scala速度的更多讨论,您可以参考此问题.