有没有办法窥探Clojure异步通道而不消耗它们的值?

时间:2016-09-05 15:41:57

标签: clojure core.async

我尝试调试某些内容,并希望在使用之前了解频道上的内容。

1 个答案:

答案 0 :(得分:1)

仅为了调试,您可以使用类似于下面功能的内容来观察频道上的值而不实际take!它(警告:这很大程度上依赖于core.async {{3} } implementation):

(defn peek [ch]
  (if (and (.buf ch)
           (pos? (count (.buf ch))))
    (if (instance? clojure.core.async.impl.buffers.PromiseBuffer
                   (.buf ch))
      (a/<!! ch)
      (last (.buf (.buf ch))))
    (some-> ch .puts first second)))

core.async本身并未提供来自频道的peek值的公开API。

如@amalloy所述,上述函数可能无法用于其他类型的缓冲区,特别是那些没有声明buf字段的缓冲区。