接地通道仍然在薄层中累积

时间:2012-09-15 10:34:19

标签: clojure

我想将Lamina库用于Clojure,特别是一个没有返回任何消息的基础通道,其映射函数(监听器?)用于转换消息和更新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! >>

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

1 个答案:

答案 0 :(得分:4)

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