gpt4 book ai didi

scala - 如何在 Scala REPL 中重新加载类或包?

转载 作者:行者123 更新时间:2023-12-01 05:02:27 25 4
gpt4 key购买 nike

我几乎总是打开一个或两个 Scala REPL session ,这使得对 Java 或 Scala 类进行快速测试变得非常容易。但是如果我更改一个类并重新编译它,REPL 会继续加载旧的。有没有办法让它重新加载类,而不必重新启动 REPL?

举一个具体的例子,假设我们有文件 Test.scala:

object Test { def hello = "Hello World" }

我们编译它并启动 REPL:
~/pkg/scala-2.8.0.Beta1-prerelease$ bin/scala
Welcome to Scala version 2.8.0.Beta1-prerelease
(Java HotSpot(TM) Server VM, Java 1.6.0_16).
Type in expressions to have them evaluated.
Type :help for more information.

scala> Test.hello
res0: java.lang.String = Hello World

然后我们把源文件改成
object Test {
def hello = "Hello World"
def goodbye = "Goodbye, Cruel World"
}

但我们不能使用它:
scala> Test.goodbye
<console>:5: error: value goodbye is not a member of object Test
Test.goodbye
^

scala> import Test;
<console>:1: error: '.' expected but ';' found.
import Test;

最佳答案

如果目标是不必重复以前的命令,则可以选择重新加载类。 REPL 有命令

:replay

它将重新启动 REPL 环境并播放所有以前的有效命令。 (无效的会被跳过,所以如果之前出错,它不会突然起作用。)当REPL重置时,它会重新加载类,因此新命令可以使用重新编译的类的内容(实际上是旧命令)还将使用那些重新编译的类)。

这不是一个通用的解决方案,但它是扩展具有可重新计算状态的单个 session 的有用快捷方式。

注意:这适用于裸 Scala REPL。如果您从 SBT 或其他环境运行它,它可能会或可能不会工作,具体取决于 SBT 或其他环境如何打包类 - 如果您不更新正在使用的实际类路径上的内容,当然它不会不行!

关于scala - 如何在 Scala REPL 中重新加载类或包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2471947/

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