Concurrency 如何从clojure/core.async获取通道的缓冲区大小?

Concurrency 如何从clojure/core.async获取通道的缓冲区大小?,concurrency,clojure,leiningen,core.async,Concurrency,Clojure,Leiningen,Core.async,我想知道如何获得clojure中频道的大小。 我用count尝试过,但不受支持。 Clojure文档通常很好,但这次我找不到任何关于它的内容 示例: (def channel1 (chan 3)) (println(count channel1)) Should be 3 but throws "count not supported on this type: ManyToManyChannel" 我找到了解决办法 (.buf (.buf ch)) ;; Get elements in

我想知道如何获得clojure中频道的大小。 我用count尝试过,但不受支持。 Clojure文档通常很好,但这次我找不到任何关于它的内容

示例:

(def channel1 (chan 3))
(println(count channel1))
Should be 3 but  throws  "count not supported on this type: ManyToManyChannel"
我找到了解决办法

(.buf (.buf ch)) ;; Get elements in buffer
;; => (:chan :on :elements)

(.count (.buf ch)) ;; Get number of elements in buffer
;; => 3

(.n (.buf ch)) ;; Get size of buffer
;; => 10

(.full? (.buf mychan)) ;; Is buffer full?
;; => false

进一步读取

通道根本不保证有缓冲区。您所做的工作依赖于实现,可能会在任何时候停止工作,并且不会在任何通道的任意实现上工作。通道是一个接口,而不是一种类型,所以除了该接口指定的内容外,您不能依赖任何内容。即使是缓冲通道(由
(chan 3)
)也可以自由地在将来实现其缓冲区,而不一定是今天的实现方式。@amalloy感谢您的回复。我只是在做一个学习作业。因此,我对这件事很在行。在写作时,我也意识到,我不再需要缓冲区的大小:-)与其将答案编辑到问题中,不如将答案作为答案发布,这有助于解决问题的机制。这样,以后点击的人就可以直截了当地回答有答案的问题。@Arthur Ulfeldt Done:-)