检查Clojure(脚本)通道是否已满
假设检查Clojure(脚本)通道是否已满,clojure,clojurescript,Clojure,Clojurescript,假设c是一个大小为n的通道。我试图用clojure(脚本)编写一个函数,检查c是否已满,如果已满,则关闭通道 但是如何检查频道是否已满?core.async为此提供了一对函数: !!如果有空间,在频道上放置一些内容,并让您知道频道是否已满 !!如果该频道可用,则获取内容,并让您知道该频道目前是否没有提供内容 所以你可以写一些像: (if-not (offer! my-chan 42) (close! my-chan)) 当你在频道上放东西的时候,它会完成这个任务。这可能比试图让另一个
c
是一个大小为n
的通道。我试图用clojure(脚本)编写一个函数,检查c
是否已满,如果已满,则关闭通道
但是如何检查频道是否已满?core.async为此提供了一对函数:
- !!如果有空间,在频道上放置一些内容,并让您知道频道是否已满
- !!如果该频道可用,则获取内容,并让您知道该频道目前是否没有提供内容
(if-not (offer! my-chan 42)
(close! my-chan))
当你在频道上放东西的时候,它会完成这个任务。这可能比试图让另一个进程监视它满了的那一刻然后关闭它更安全。如果您确实想检查缓冲区是否已满,可以提取缓冲区并询问:
user> (->> (async/chan (async/buffer 1))
(.buf)
(.full?))
false
虽然先仔细想一想 不幸的是,我的程序值得采用第二种方法(但了解offer!和poll!是有用的)。现在的问题是,提供的代码片段在ClojureScript中似乎不起作用。频道在CLJS上下文中是否有
.buf
方法?无需担心:事实证明,在ClojureScript中使用(count(.-buf(chan))
可以实现这个技巧。