REPL

概览

语言
此文档页面专门针对 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 存储库 接受拉取请求。

此页面贡献者