为什么要在球拍中调用(从in-make-pipe中读取)块?

时间:2016-01-18 09:17:46

标签: 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

1 个答案:

答案 0 :(得分:4)

这里的根本问题是读者必须从输入中解析一个完整的值。当您向管道发送“234234”时,管道包含8个字符,最后一个(第二个双引号)通知read该值已完成。当你写234234时,管道中唯一的东西是数字,读者无法判断数字是否完整。要查看此内容,请尝试以下操作:

#lang racket

(define-values (in out) (make-pipe))
(write 234234 out)
(write 111 out)
(display " " out)
(read in)

这会产生数字234234111。