2016-01-18 34 views
4

我從文檔驗證碼:爲什麼這樣調用(從管道中讀入)塊中?

(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 

回答

4

這裏的底層問題是讀者必須從輸入中解析出一個完整的值。當您向管道發送「234234」時,管道包含8個字符,最後一個(第二個雙引號)通知read該值已完成。當你寫234234時,管道中唯一的數字是數字,讀者不能分辨數字是否完整。看到這一點,請嘗試以下操作:

#lang racket 

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

這將產生數234234111.

+0

使得完整意義上的! (現在...) –

相關問題