在Scala中是否有类似于getch()的等效函数?

3
我正在寻找Scala中类似于getch的功能。在使用控制台时,我希望我的程序根据用户输入的字符显示信息(例如,如果我正在显示文本,则按n会显示下一页,按p会显示上一页)。目前我正在使用readLine或readChar,但它们要求用户在每次输入后按Enter键,有点烦人。此外,在Eclipse插件的解释器中,输入字符是可见的,尽管我想这可能是不可避免的。
3个回答

7

scala.Console.readChar,在当前版本的Scala中别名为Predef.getChar,是最直接的方法。

scala> readChar
res0: Char = !

更新

这次不需要烦人的 Enter

scala> Console.in.read.toChar
res0: Char = !

1
我也尝试了(使用Scala 2.9.0.1和Java 1.6.0_24),但它要求我按下Enter键。 - tenshi
我会将这个标记为答案,因为它是一个Scala解决方案,尽管这与Easy Angel的回答等效。 - Henry Henrinson

3

使用 StdIn 库:

    StdIn.readChar()

在Scala 2.11中,这需要按Enter键,但它会丢弃Enter键,这非常方便。 - F. P. Freely
这很好,但如果你只是按回车键,你会得到一个异常:Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0 - cstroe

2

您可以尝试使用Java 1.6版本中新增的Console。以下是REPL会话示例:

scala> val r  = System.console().reader()
r: java.io.Reader = java.io.Console$LineReader@1d97efc

scala> r.read.toChar
res8: Char = t

在repl会话期间,我在执行第二个表达式后按下了t键。 reed方法不需要按下Enter键,只要你按下键就会立即返回。

啊,我应该想到这个问题有一个Java解决方案。它起作用了,谢谢。 - Henry Henrinson

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