如何使用管道上的传感器创建多个输出?
How to create multiple outputs using a transducer on a pipeline?
我想了解如何设置每个输入有多个输出的 clojure 管道,但到目前为止我还没有成功。
管道的 documentation 表示
[...] the transducer will be applied independently to each
element [...] and may produce zero or more outputs
per input. [...]
但是,我不明白如何让每个输入获得 1 个以上的输出。
我想对同一个输入应用多个转换,并将所有结果放到输出通道上。我相信这也可以使用 mult, tap and merge 来完成,但是,与向管道传感器添加另一个转换相比,这会引入更多的开销。
我用玩具示例试了一下:
(def ca (chan))
(def cb (chan))
(defn f [in] in)
(defn g [in] (* 2 in))
(pipeline 1 cb (map (juxt f g)) ca)
(put! ca 1)
(<!! cb)
但是,这会在单个输出中输出 [1 2],而不是两个单独的输出。
那么:我如何在两个通道之间设置一个 clojure 管道,以便它在输入通道上的每个输入在输出通道上产生多个 (>1) 个输出?
使用 mapcat
而不是 map
。区别在于:map是一对一的,而mapcat是一对多的。
我想了解如何设置每个输入有多个输出的 clojure 管道,但到目前为止我还没有成功。
管道的 documentation 表示
[...] the transducer will be applied independently to each element [...] and may produce zero or more outputs per input. [...]
但是,我不明白如何让每个输入获得 1 个以上的输出。
我想对同一个输入应用多个转换,并将所有结果放到输出通道上。我相信这也可以使用 mult, tap and merge 来完成,但是,与向管道传感器添加另一个转换相比,这会引入更多的开销。
我用玩具示例试了一下:
(def ca (chan))
(def cb (chan))
(defn f [in] in)
(defn g [in] (* 2 in))
(pipeline 1 cb (map (juxt f g)) ca)
(put! ca 1)
(<!! cb)
但是,这会在单个输出中输出 [1 2],而不是两个单独的输出。
那么:我如何在两个通道之间设置一个 clojure 管道,以便它在输入通道上的每个输入在输出通道上产生多个 (>1) 个输出?
使用 mapcat
而不是 map
。区别在于:map是一对一的,而mapcat是一对多的。