Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
忽略Scala编译错误,如Java_Java_Scala_Compilation - Fatal编程技术网

忽略Scala编译错误,如Java

忽略Scala编译错误,如Java,java,scala,compilation,Java,Scala,Compilation,如何像使用Java一样跳过scalac编译错误 这会导致编译器跳过错误文件,编译其余文件,并将崩溃留给运行时处理 我使用SBT,但由于它使用scalac,我认为它将是从SBT传递过来的scalac的命令行参数 更新: 我的目标是运行程序,并在达到错误时使其在运行时失败 例如,可以有一个没有错误的主GUI,它有一个按钮来启动一个有错误的服务器 在Java中,当单击启动服务器的按钮时,GUI将在运行时运行并失败 在Scala中,程序甚至不会运行,因为GUI文件无法在服务器文件编译之前编译 您的请求违

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

这会导致编译器跳过错误文件,编译其余文件,并将崩溃留给运行时处理

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

更新:

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

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

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

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

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

如果Scala编译器将提供你所请求的,我会认为它是编译器中的一个错误。< /P> 如何让它工作(如果你仍然想做) 当然,没有人会阻止您运行带有编译错误的程序。这在一定程度上是可能的

  • 将您的程序分为几个模块(例如,一个核心和几个插件)
  • 独立编译部件。当其中一个模块中出现错误时,Scala不会编译它)
  • 将结果(Scala产生了一些结果)复制到一起
  • 运行结果
  • 您可以使用某种依赖注入(例如)或一些插件基础设施(例如)来更好地处理插件

    个人轶事(为什么你不应该这样做)
    我和我的团队为一位客户开发了一种定制编程语言,包括一个运行时和一个IDE(基于)。在早期版本中,我们有一个编译器,可以编译有语法错误的文件。它只是在需要时添加额外的标记(右括号、关键字、缺少的字符串或数字),直到语法再次正常为止。这种工具对于有编译错误的文件中的语法突出显示和完成非常有用(例如,因为该文件当前正在进行中,并且缺少某些部分)。但是当你运行编译器产生的结果时,结果往好里说是滑稽的,往坏里说是灾难性的。我们很快更改了编译器,因此当源代码中出现任何错误时,它将不再发出可运行的代码。

    您希望如何处理此问题?Scala应该如何处理无法编译的文件?@stefan.schwetschke我的目标是运行程序,并在运行时遇到错误时使其失败。现在用例子更新帖子。投票结束一个合法的问题?如果你能提供你投票的理由,我很乐意更新我的帖子。特别是这个问题,很多来自Java的人都会问。谢谢你写的这么好的帖子。请允许我不同意设计原则。拥有在运行时不会失败的代码是程序员的工作。编译器可以纠正语法错误,但不能总是纠正逻辑错误。编译器应该能够跳过语法错误,同时通知程序员语法错误。程序员的工作是检查这些错误。我知道Java将允许这一点,它是一种非常成熟的语言。我正在研究eclipse编译器如何跳过错误,以及是否可以使用Scala进行模拟。我应该说编译器可以通知语法错误,而不是纠正语法错误。作为这个问题的解决方案,我想知道是否可以让编译器注释掉非编译行,并通知它们已被跳过,如果在运行时到达,则抛出异常。您说过如果不编译,可以跳过包,那么为什么不应该跳过单个文件或行?@BAR完整的编译单元,而不是它们的一部分(包、文件或行)。编译单元是一组可以自己编译的文件。实际上,您会多次运行scalac,每个编译单元一次。如果编译单元中有任何错误,scalac将失败,并且不会为该编译单元创建任何二进制(类)文件。这是有意义的。尽管我想知道如何跳过编译单元。我有一个没有被任何其他文件使用的文件,因此是一个编译单元,它停止编译,因为它有错误。我需要一个命令行钩子吗?你能提供一个源代码吗?“…因为它违背了Scala中的一个设计原则:当程序编译时,不会出现运行时错误。”