我尝试使用DrRacket
的REPL来测试用户是否输入了y
字符。
为此,我使用了这样的代码:
(eq? (read-char) #\y)
当我运行此代码时,DrRacket
会显示一个带有 EOF 按钮的输入文本框,我想我在完成输入时应该点击
所以我的输入是 y eof ,它返回true,但是当我第二次运行代码行时,我没有得到文本框;相反,它会立即返回false。我猜这是因为它没有从缓冲区中丢弃 eof ,所以它将它与y
进行比较。
如何告诉REPL不要在缓冲区中包含 eof ?
答案 0 :(得分:2)
如果要发送eof-object,则需要单击EOF按钮。 原则上,当读取文件结束对象时,端口上不应再出现任何输入。
在repl中,用户通常使用enter / return来表示输入已完成。 因此,我建议您在DrRacket中使用此约定。
这个程序:
#lang racket
(define (yes? [display-message #t])
(when display-message
(displayln "Enter y or n:"))
(match (read-line)
["y" 'yes]
["n" 'no]
[else (yes? #f)]))
(displayln (yes?)) (flush-output)
(displayln (yes?)) (flush-output)
似乎有用(当使用eof按钮时也是如此)。