私は自分のアプリケーションのデータを保存するためにClojureのSTMを使用したいが、データ構造を持っていることは目に見えないデータストアに構造を持続。自分の機能で組み込みの型を拡張して、APIのユーザーが気づかないようにするにはどうすればいいですか?私はすべての後、標準のClojureを使用したいSTMトランザクションにClojureのハッシュマップの過負荷を
ノートでは、それによって気づいていないAPIの呼び出し元を作り、データ構造を操作するために呼び出します。これも可能ですか?
私は自分のアプリケーションのデータを保存するためにClojureのSTMを使用したいが、データ構造を持っていることは目に見えないデータストアに構造を持続。自分の機能で組み込みの型を拡張して、APIのユーザーが気づかないようにするにはどうすればいいですか?私はすべての後、標準のClojureを使用したいSTMトランザクションにClojureのハッシュマップの過負荷を
ノートでは、それによって気づいていないAPIの呼び出し元を作り、データ構造を操作するために呼び出します。これも可能ですか?
deftypeは新しいデータ構造型のものを作成するように設計されていますが、Clojure-in-ClojureとClojureの内部構造のプロトコル化が多くなるまで、これらの目標を達成できるかどうかはわかりません。私は間違っていることを愛するだろう。 :)
これは方法ですが、あなたはclojure.lang
からのインタフェース(プロトコル)を拡張することができるかどうかわかりません。ここでは、地図のassoc
機能に副作用を追加するという、ごくわずかな例があります(必要に応じて)。
(deftype LolMap [m]
clojure.lang.IPersistentMap
(assoc [this k v] (do (println (str k " CAN HAS " v "!"))
(LolMap. (assoc m k v))))
clojure.lang.Seqable
(seq [this] (seq m)))
タイプは、本物のマップをラップし、あなたは(IPersistentMapとSeqableはREPLでインスタンスをインスタンス化して印刷することができるようにする最低限です)関与するすべての のインターフェイスのための適切な実装を提供する必要があります。すべての読み取り操作では、実際のマップ関数を実装として渡すだけで十分です。
重複しているかどうかわからない:http://stackoverflow.com/questions/4522796/how-should-i-make-a-clojure-stm-program-persistent –
何らかの点では重複です、はい。この質問では、私はclojureのコア関数のオーバーロードについてもっと調べようとしていました – Zubair