Clojure 一条接地通道仍在薄层中积聚
我想使用Clojure的Lamina库,特别是一个不返回任何消息的固定通道,其映射函数(侦听器?)用于转换消息和更新UI元素 我的代码运行良好,并达到了我预期的效果,但是当我将其可视化时,它表明值实际上正在累积: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
(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)
。