Scala不确定/缓存类



我有一个非常简单的目标:编译一个Scala类,然后从另一个Scala脚本中加载它。问题是Scala似乎缓存(不确定在哪里)我创建的类,并且不尊重后续的更改。

下面几行用两个.scala文件创建一个目录,编译一个,并运行另一个:

mkdir test
cd test
echo 'class MyClass(s: String)' > MyClass.scala
echo 'val p = new MyClass("ok")' > test.scala
scalac MyClass.scala
scala test.scala # this works
cd ..
rm -rf test

如果我运行上面的行,我需要重新启动我的计算机以使下面的行工作:

mkdir test
cd test
echo 'class MyClass()' > MyClass.scala
echo 'val p = new MyClass()' > test.scala
scalac MyClass.scala
scala test.scala # this doesn't
cd ..
rm -rf test

如果我不重新启动,我得到一个错误,我在构造函数中丢失了一个String。

不确定它在scala的哪个地方缓存了以前的基于字符串的构造函数。

这是因为scala脚本运行器在后台启动了编译服务器(fsc)的驻留实例。在运行第一个脚本后,您应该能够找到一个正在运行的java进程,其主类为scala.tools.nsc.CompileServer

注意,这只发生在使用scala运行脚本时,也就是说,.scala文件包含一个带有主类的编译单元。

scala的后续调用将使用此编译服务器(仅当用于运行脚本时),该服务器缓存有关先前编译运行的信息,因此出现错误。

你可以指示scala在运行脚本时不使用fsc:

scala -nc test.scala

你也可以关闭后台实例:

fsc -shutdown

或者使用:

fsc -reset

相关内容

  • 没有找到相关文章

最新更新