我尝试调试某些内容,并希望在使用之前了解频道上的内容。
答案 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
字段的缓冲区。