racket - 为什么这个调用 (read in-from-make-pipe) 在 Racket 中阻塞?

标签 racket

我从文档中得到了这个代码:

(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/

相关文章:

scheme - Racket/Scheme 编译为单个二进制文件,没有依赖项? FFI 和静态链接

方案:使用回溯查找给定字符列表和单词列表的句子排列

module - 如何制作参数化模块

scheme - 如何将 map 与需要更多参数的函数一起使用

racket - 我什么时候应该使用 Rosette 的浅嵌入与深层嵌入进行程序合成?

list - 从列表中删除整数

scheme - Racket 方案 - 流图问题

recursion - 生成递归和结构递归有什么区别?

scheme - DrRacket : atom? 和符号? undefined - 怎么了?

macros - 在 syntax-case 中绊倒 syntax-quote-unsplicing、template variables 和 ellipses