Clojure mult vs core.async中的广播
我在玩core.async,发现使用它很有趣。然而,我无法理解mult和broadcast的不同用例。它们都是需要的还是一个会被另一个取代? 到目前为止,我发现的唯一区别是,使用mult更容易进入和解除标记。不知道如何取消订阅广播,这是唯一的区别吗 下面我举了一个例子,展示了如何使用这两种方法解决问题Clojure mult vs core.async中的广播,clojure,clojurescript,core.async,Clojure,Clojurescript,Core.async,我在玩core.async,发现使用它很有趣。然而,我无法理解mult和broadcast的不同用例。它们都是需要的还是一个会被另一个取代? 到目前为止,我发现的唯一区别是,使用mult更容易进入和解除标记。不知道如何取消订阅广播,这是唯一的区别吗 下面我举了一个例子,展示了如何使用这两种方法解决问题 ;; Using mult with tap (def in (chan)) (def multiple (mult in)) (def out-1 (chan)) (tap multiple
;; Using mult with tap
(def in (chan))
(def multiple (mult in))
(def out-1 (chan))
(tap multiple out-1)
(def out-2 (chan))
(tap multiple out-2)
(go (>! in "PutIN"))
(go (prn "From out-1: " (<! out-1)))
(go (prn "From out-2: " (<! out-2)))
;;使用带水龙头的骡子
(陈德仁)
(def多路(多路输入))
(def out-1(chan))
(点击多个out-1)
(def out-2(chan))
(点击多个out-2)
(在“普京”中使用“>”)
(从out-1开始执行(prn):(
//
;;使用广播
(陈耀文)
(陈耀文)
(def广播进入(广播第1回合第2回合))
(go(>!在“PutINBroadcast”中广播)
(bout-1中的go(prn):(这是对clojure.core.async.lab
命名空间的注释,带有广播
)
core.async高度实验性的功能探索
注意事项:
此命名空间中定义的所有内容都是实验性的,可以在没有警告的情况下进行更改或删除
此名称空间提供的许多功能与core.async.Potential功能的实现细节高度耦合
在更高的抽象级别上,适合包含在
例子
此命名空间提供的功能可能会在以后的某个时间点升级到clojure.core.async,但不能保证
他们中的任何一个都会
很长一段时间以来没有人对它进行过研究,它从未被移植到ClojureScript。我希望它在不久的将来从core.async中删除。mult
是后来的开发
;; Using broadcast
(def bout-1 (chan))
(def bout-2 (chan))
(def broadcast-in (broadcast bout-1 bout-2))
(go (>! broadcast-in "PutINBroadcast"))
(go (prn "From bout-1: " (<! bout-1)))
(go (prn "From bout-2: " (<! bout-2)))