gpt4 book ai didi

scala - FSC 每次都重新编译

转载 作者:行者123 更新时间:2023-12-01 09:08:44 25 4
gpt4 key购买 nike

FSC 每次都重新编译我的 .scala 文件,即使不需要 - 我可以编译两次,而无需在尝试之间编辑任何内容,然后重新编译它们!例如,我有 2 个文件

Hello.scala

class Hello{
print("hello")
}

还有 Tokens.scala:

abstract class Token(val str: String, val start: Int, val end: Int)
{override def toString = getClass.getSimpleName + "(" + "[" + start + "-" + end + "]" + str + ")"}
class InputToken(str: String, start: Int, end: Int)
extends Token(str, start, end)
class ParsedToken(str: String, start: Int, end: Int, val invisible: Boolean)
extends Token(str, start, end)

当我让 ant 从头开始​​编译项目时,我看到以下输出:

ant compile
init:
[mkdir] Created dir: D:\projects\Test\build\classes
[mkdir] Created dir: D:\projects\Test\build\test\classes

compile:
[fsc] Base directory is `D:\projects\Test`
[fsc] Compiling source files: somepackage\Hello.scala, somepackage\Tokens.scala to D:\projects\Test\build\classes

BUILD SUCCESSFUL

比我不编辑任何东西并再次询问ant compile:

ant compile
init:
[mkdir] Created dir: D:\projects\Test\build\classes
[mkdir] Created dir: D:\projects\Test\build\test\classes

compile:
[fsc] Base directory is `D:\projects\Test`
[fsc] Compiling source files: somepackage\Tokens.scala to D:\projects\Test\build\classes

BUILD SUCCESSFUL

如您所见,fsc 在 Hello.scala 的情况下表现得很聪明(没有重新编译)而在 Tokens.scala 的情况下表现得很愚蠢。我认为这个问题在某种程度上与继承有关,但仅此而已。

那么有什么问题呢?

最佳答案

Tokens.scala 被重新编译,因为没有与其基名匹配的类文件。也就是说,它不会生成 Tokens.class 文件。在决定是否编译源文件时,fsc 会查找具有相同基名的类文件,如果类文件不存在或源文件的修改时间晚于类文件,则重新构建源文件.如果可以的话,我建议你看看Simple Build Tool ,它的连续编译模式准确地跟踪source->classfile映射并且不会重新编译Tokens.scala

如果你有一个不同的源文件,其中包含 class Tokens,编译器会怎么做。

尽管 scala 允许在任何源文件中使用任意公共(public)类/对象,但仍有相当多的工具假设您将在一定程度上遵循 java 约定,并且文件中至少有一个与源文件同名的类/对象文件基本名称。

关于scala - FSC 每次都重新编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3803672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com