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)https://github.com/ztellman/lamina/wiki/Channels-newmap*の「チャネル オペレーター」セクションで説明されているように、何かを呼び出すと新しいチャネルが返されることに注意してください。その新しいチャネルに蓄積されたメッセージにアクセスしたい場合は、 によって返されたチャネルで read-channel を呼び出す必要があります。 map*

于 2012-09-15T18:34:43.407 に答える