core.async 切换频道组合

core.async toggle channel mix

我正在试验 core.async 的混音。似乎将混音中的输入通道静音是实现背压的一种可能方法。我正在使用以下代码:

(def output-chan (chan))
(def input-chan (chan))
(def mixer (admix (mix output-chan) input-chan))
(toggle mixer {input-chan {:mute true}})

评估 REPL 中的最后一行给出

CompilerException java.lang.IllegalArgumentException: No implementation of method: :toggle* of protocol: #'clojure.core.async/Mix found for class: java.lang.Boolean.

上面的示例代码有什么问题?

谢谢!

(def mixer (admix (mix output-chan) input-chan))

您将 admix 的 return 值分配给 mixer,这是一个布尔值,而不是预期的混合器。尝试:

(def output-chan (chan))
(def input-chan (chan))
(def mixer (mix output-chan))
(admix mixer input-chan)
(toggle mixer {input-chan {:mute true}})