如何在Scala REPL中回显用户输入?

8

我正在教授一门关于Scala编程的入门课程,我们从REPL(交互式解释器)开始学习。不过REPL存在一个问题,当学生输入readLine命令时,他们的输入内容不会被回显。我能提供或建议一些解决方法吗?

在使用Eclipse的过程中,我并没有遇到这个问题,但是在几周后我才会向我的学生介绍Eclipse。


@som-snytt reader.readLine在2.10版本中由于某种奇怪的原因无法工作。我猜这就是问题所在。 - gourlaysama
2个回答

4
你可以使用“power mode”来访问REPL的读取器,这将为你提供一个完全工作的readLine:
scala> :power
** Power User mode enabled - BEEP WHIR GYVE **
** :phase has been set to 'typer'.          **
** scala.tools.nsc._ has been imported      **
** global._, definitions._ also imported    **
** Try  :help, :vals, power.<tab>           **

scala> repl.in.readLine("enter something: ")
enter something: hello world
res0: String = hello world

scala>

编辑: 正如@som-snytt所指出的,在2.11版本中,您可以在上述代码中使用reader代替repl.in,这既更短也更易记。


谢谢!repl.in.readLine完美地工作了;reader.readLine则不行。 <br> 在我的Mac上,我得到了错误:未找到值reader。 在Windows上,我得到了错误:无法在scala.tools.nsc.Global中访问类Global中的值reader。 <br> 无论如何,repl.in.readLine对我的学生来说可能更好,因为它强调这仅适用于REPL。 - David Matuszek

2

使用 scala -Xnojline 命令:

scala> val l = readLine
test
l: String = test

这种方法会破坏一些功能,尤其是箭头键,因此您无法修改先前的命令。

如果可用,可以使用rlwrap scala -Xnojline(在cygwin上也应该可用)来恢复这些功能。

全文感谢这篇文章


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接