从流锁读取Clojure函数

时间:2009-06-30 02:06:21

标签: function recursion clojure stream

我有一个函数,它从被调用的输入流中读取一个标记(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)) ))))))

1 个答案:

答案 0 :(得分:1)

只是一个猜测,但是如果流上没有任何内容可以获得下一个指示器块吗?你在recur之前连续两次调用它(然后在之后执行.read来检测结束)。如果在任一get-next-indicator调用期间流都没有字节,那么该函数将挂起,等待流上的足够字节来完成这些调用。