2

我想为 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! >>

这种隐藏的积累有问题吗?

4

1 回答 1

4

消息不会在接地通道中累积,它们会在您通过调用创建的通道中累积(map* inc ch)。请记住,调用类似map*返回一个新频道,如https://github.com/ztellman/lamina/wiki/Channels-new的“频道操作员”部分所述。如果要访问该新通道中累积的消息,则需要在返回的通道上调用 read-channel map*

于 2012-09-15T18:34:43.407 回答