Clojure 什么';core.async中pub和mult的区别是什么&;一个示例用例?

Clojure 什么';core.async中pub和mult的区别是什么&;一个示例用例?,clojure,core.async,Clojure,Core.async,我已经使用core.async有一段时间了,但避免使用pub和mult,因为我无法从他们的文档中真正掌握有用的用例 具体来说,主题fn的目的是什么,您将如何在实践中使用它 或者你可以将一个理论解释映射到下面的虚拟方法上。我认为这将有助于了解它在实践中是如何工作的(如果适用的话?) 解释的虚拟方法: 将有几个不同的视图来表示该状态。为了让他们对状态变化做出反应,我希望有几个通道(在应用程序级别上),例如,专用于状态变化和用户输入(如按键) 每个视图都应该能够将?分(划)到此应用程序通道,以便它们能

我已经使用core.async有一段时间了,但避免使用
pub
mult
,因为我无法从他们的文档中真正掌握有用的用例

具体来说,
主题fn的目的是什么,您将如何在实践中使用它

或者你可以将一个理论解释映射到下面的虚拟方法上。我认为这将有助于了解它在实践中是如何工作的(如果适用的话?)

解释的虚拟方法:

将有几个不同的视图来表示该状态。为了让他们对状态变化做出反应,我希望有几个通道(在应用程序级别上),例如,专用于状态变化用户输入(如按键)


每个视图都应该能够将分(划)到此应用程序通道,以便它们能够独立地对更改做出反应。此外,每个视图都应该可以
在状态通道(但不是用户输入通道)上放置内容。

core.async中的通道是单放单取。也就是说,任何进入的信息都只提供给一个接收者。这在广播情况下不起作用,在广播情况下,许多go块需要将每条消息的副本放入一个频道,然后您需要其他内容。这就是mult的用途。Mult也可能被称为“广播”

Pub就是mult+multi方法。主题fn是应用于每个输入项的函数。函数的输出决定消息的主题。然后,只将输入消息广播给正在收听该主题的订阅者

更多信息见我在上一届联合会上的演讲笔记,可在以下位置获得: