此文档页面专门针对 Scala 2 中发布的功能,这些功能已在 Scala 3 中移除或被替代功能取代。除非另有说明,本页中的所有代码示例均假定您使用的是 Scala 2。
Scala REPL 是一个工具 (scala),用于评估 Scala 中的表达式。
scala 命令将通过将源脚本包装在一个模板中,然后编译并执行生成的程序来执行该脚本。
在交互模式下,REPL 会在提示符处读取表达式,将它们包装在一个可执行模板中,然后编译并执行结果。
之前的结果会根据需要自动导入到当前表达式的作用域中。
REPL 还提供了一些命令工具,如下所述。
可以在 Ammonite 项目 中找到一个替代 REPL,该项目还提供了一个更丰富的 shell 环境。
功能
REPL 的有用功能包括
- REPL 的 IMain 绑定到
$intp
。 - REPL 的最后一个异常绑定到
lastException
。 - 使用制表符进行补全。
- 使用
//print<tab>
显示键入的去糖。 - 使用
:help
获取命令列表。 - 使用
:load
加载 REPL 输入文件。 - 使用
:paste
将类和对象作为伴随对象输入。 - 使用
:paste -raw
禁用代码换行,定义包。 - 使用
:javap
检查类工件。 - 使用
-Yrepl-outdir
使用外部工具检查类工件。 - 使用
:power
进入 power 模式并导入编译器组件。 - 使用
:settings
修改编译器设置;某些设置需要:replay
。 - 使用
:replay
使用修改后的设置重播会话。
实现说明
- 用户代码可以包装在对象中(以便代码在类初始化期间运行)或类中(以便代码在实例构建期间运行)。开关是
-Yrepl-class-based
。 - 每一行输入都单独编译。
- 对前几行的依赖关系通过自动生成的导入包含在内。
- 可以通过输入显式导入来控制
scala.Predef
的隐式导入。
示例
scala> import Predef.{any2stringadd => _, _}
import Predef.{any2stringadd=>_, _}
scala> new Object + "a string"
<console>:13: error: value + is not a member of Object
new Object + "a string"
^
scala> import Predef._
import Predef._
scala> new Object + "a string"
res1: String = java.lang.Object@787a0fd6a string
Power 模式
:power
模式从解释器的编译器导入标识符。
这类似于使用 import reflect.runtime._, universe._
从运行时反射上下文中导入。
Power 模式还提供了一些实用方法,如欢迎横幅中所述。
可以使用 :imports
或 -Xprint:parser
来见证其功能。
为 Scala REPL 做贡献
REPL 源是 Scala 项目的一部分。问题由项目的标准机制跟踪,并且 GitHub 存储库 接受拉取请求。