我有一个函数,它从被调用的输入流中读取一个标记(get-next-indicator stream indicator)并返回它。我试图用它来构建一个地图。
但是,当我运行它时,它会锁定。如果我删除其中一个get-next-indicator函数,它确实有效。 这两个函数是否同时尝试读取流。是什么导致了这个?
(defn decode-map [ stream ]
(loop [result {}]
(let [c (char (.read stream))]
(if (= c \e)
result
(recur (assoc result (get-next-indicator stream (int c))
(get-next-indicator stream (int c)) ))))))
答案 0 :(得分:1)
只是一个猜测,但是如果流上没有任何内容可以获得下一个指示器块吗?你在recur之前连续两次调用它(然后在之后执行.read来检测结束)。如果在任一get-next-indicator调用期间流都没有字节,那么该函数将挂起,等待流上的足够字节来完成这些调用。