我从文档中得到了这个代码:
(define-values (in out) (make-pipe))
(write "234234" out)
(read in)
这会产生
"234234"
就像在文档中一样。下一段代码,只是阻止读取。为什么会发生这种情况?(define-values (in out) (make-pipe))
(write 234234 out) ; <-- NOT A STRING
(read in) ; <-- BLOCKS
最佳答案
这里的潜在问题是读者必须从输入中解析出一个完整的值。当你向管道发送“234234”时,管道包含8个字符,最后一个(第二个双引号)通知read
值是完整的。当你写 234234 时,管道中唯一的东西是数字,读者无法判断数字是否完整。要查看这一点,请尝试以下操作:
#lang racket
(define-values (in out) (make-pipe))
(write 234234 out)
(write 111 out)
(display " " out)
(read in)
这会产生数字 234234111。
关于racket - 为什么这个调用 (read in-from-make-pipe) 在 Racket 中阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34851056/