Clojure 一条接地通道仍在薄层中积聚

Clojure 一条接地通道仍在薄层中积聚,clojure,Clojure,我想使用Clojure的Lamina库,特别是一个不返回任何消息的固定通道,其映射函数(侦听器?)用于转换消息和更新UI元素 我的代码运行良好,并达到了我预期的效果,但是当我将其可视化时,它表明值实际上正在累积: (use 'lamina.core 'lamina.viz) (def ch (grounded-channel)) (map* inc ch) (enqueue ch 1 2 3) (view-graph ch) 这些值永远不会被使用,也无法访问: (read-channel ch

我想使用Clojure的Lamina库,特别是一个不返回任何消息的固定通道,其映射函数(侦听器?)用于转换消息和更新UI元素

我的代码运行良好,并达到了我预期的效果,但是当我将其可视化时,它表明值实际上正在累积:

(use 'lamina.core 'lamina.viz)
(def ch (grounded-channel))
(map* inc ch)
(enqueue ch 1 2 3)
(view-graph ch)
这些值永远不会被使用,也无法访问:

(read-channel ch)
<< ... >> ;; empty channel
(last* ch)
<< ERROR: :lamina/already-consumed! >>
(读取频道ch)
> ;; 空通道
(最后*章)
>

这种隐藏的累积是一个问题吗?

消息不是在固定通道中累积,而是在您通过调用
(map*inc ch)
创建的通道中累积。请记住,调用类似于
map*
的函数将返回一个新频道,如中的“频道操作员”部分所述。如果要访问在该新频道中累积的消息,需要在
map*
返回的频道上调用read channel

消息不是在固定频道中累积,而是在您通过调用
(map*inc ch)
创建的频道中累积。请记住,调用类似于
map*
的函数将返回一个新频道,如中的“频道操作员”部分所述。如果要访问在该新频道中累积的消息,需要在
map*
返回的频道上调用read channel

谢谢你的回复,也谢谢你的图书馆。当我引起您的注意时,是否可以创建一个通道,使映射函数的返回值不会累积,或者我应该使用不同的设计?我已经稍微更改了设计,因此映射函数现在会提醒ui有新消息要读取。它是否决定阅读它们是另一回事。这似乎更正确。如果您愿意,您可以随时调用
(地面ch)
,查看
地图*
的结果。感谢您的回复,并感谢您提供的库。当我引起您的注意时,是否可以创建一个通道,使映射函数的返回值不会累积,或者我应该使用不同的设计?我已经稍微更改了设计,因此映射函数现在会提醒ui有新消息要读取。它是否决定阅读它们是另一回事。这似乎更正确。如果您愿意,您可以随时调用
地图*
的结果
(地面ch)