像Java一样忽略Scala编译错误

时间:2015-01-28 05:32:51

标签: java scala compilation

如何像Java一样跳过scalac编译错误?

这会导致编译器跳过错误的文件,编译其余文件,并将崩溃保留为运行时。

我使用SBT,但由于它使用了scalac,我认为它将是从SBT传递的scalac的命令行参数。

更新:

我的目标是运行程序,并在达到错误时在运行时使其失败。

例如,可以有一个主GUI,没有错误,按钮可以启动服务器。

在Java中,当点击启动服务器的按钮时,GUI将在运行时运行并失败。

在Scala中,程序甚至不会运行,因为GUI文件无法在服务器文件之前编译。

1 个答案:

答案 0 :(得分:1)

您的请求违反了Scala的原则(请不要这样做)

这在Scala中是不可能的,因为它违反了Scala中的一个设计原则:当程序编译时,不会出现运行时错误。当然,这个原则并不适用于所有极端情况。但人们正在努力涵盖所有常见案例。

如果Scala编译器会提供您要求的内容,我会认为它是编译器中的错误。

如何使其工作(如果您仍想这样做)

当然,没有人阻止你运行编译错误的程序。它可能达到一定程度。

  1. 将您的程序拆分为多个模块(例如一个核心和几个插件)
  2. 独立编译零件。当其中一个模块出现错误时,Scala将无法编译它)
  3. 将结果(Scala生成的内容)复制到一起
  4. 运行结果
  5. 您可以使用某种依赖注入(例如Guice)或某些插件基础结构(例如Apache Felix)来更好地处理插件。

    个人轶事(为什么你不应该这样做)

    对于一个客户,我和我的团队开发了一种自定义编程语言,包括运行时和IDE(基于Eclipse xText)。在早期版本中,我们有一个编译器可以编译带有语法错误的文件。它只是在需要时添加了额外的标记(右括号,关键字,缺少字符串或数字),直到语法再次正常。这样的工具对于具有编译错误的文件中的语法突出显示和完成非常有用(例如,因为该文件当前正在进行中并且某些部分缺失)。但是当你运行编译器产生的东西时,结果最好是搞笑,最糟糕的是灾难性的。我们很快就更改了编译器,因此当源代码中出现任何错误时,它不会再发出可运行的代码。