我想将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! >>
这隐藏的积累是一个问题吗?
答案 0 :(得分:4)
消息不会在接地频道中累积,它们会在您通过调用(map* inc ch)
创建的频道中累积。请记住,调用map*
之类的内容会返回一个新频道,如https://github.com/ztellman/lamina/wiki/Channels-new的“频道运营商”部分所述。如果要访问在新频道中累积的消息,则需要在map*
返回的频道上调用读取频道。