【问题标题】:What is the current class in Scala REPL?Scala REPL 中的当前类是什么?
【发布时间】:2016-06-22 21:39:13
【问题描述】:

您可以定义变量和方法。它们应该属于某个父类。而且,确实,this.getClass 打印了一些东西。但是,这有点奇怪。当前的背景是什么?如何将上下文切换到另一个对象?例如,我看到 scala 组合器要求每个解析器都有一个方法,这意味着您需要使用大型(多行)类。您如何进入该对象的范围以使用命令行对其进行调整?

【问题讨论】:

  • REPL 正在创建多个嵌套范围,每个评估都向下一层。这就是为什么您可以重新定义(阴影)之前的valdef。你不能“调整”一个对象,Scala 是一种编译语言,它可以一劳永逸地创建对象。

标签: scala interpreter read-eval-print-loop


【解决方案1】:

您可以在提示符或:paste 模式下输入类。

$ scala
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_65).
Type in expressions for evaluation. Or try :help.

scala> class C
defined class C

scala> :pa
// Entering paste mode (ctrl-D to finish)

class C {
  val c = 42
}

// Exiting paste mode, now interpreting.

defined class C

scala> 

在您的环境中设置EDITOR,您可以编辑历史记录。

在这台旧 Mac 上,

$ EDITOR=/Applications/TextEdit.app/Contents/MacOS/TextEdit

然后

scala> :hi
657  Future(42)
658  .value
659  class C
660  :pa
661  class C {
662    val c = 42
663  }

scala> :ed 661-

【讨论】:

  • 粘贴整个类违背了(命令行)解释器的全部目的。您使用浏览器访问 SO。使用 Chrome 并在一些 javascript 函数中设置调试器断点。了解如何 REPL - 使用控制台命令在函数的上下文中评估和设置值。我不明白编辑历史是如何使这成为可能的。
  • 顺便说一句,2.12 有一个 ScriptEngine 用于动态设置任意上下文;但通常在 REPL 中,您只需定义一些变量并引用它们。
  • @som-snytt关于“动态设置任意上下文的ScriptEngine”,可以用Nested environments in Scala REPL解决吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多