私はかなり大きなツリーを形成するClojureハッシュマップ(STM refを介してアクセス)のさまざまな部分を変更し、一部の登録済みリスナーを呼びたい部分の変更を見たいと思います。 「add-watch」は参照全体でしか機能しないと理解しているので、どのようにしてこれをクロージャーで行うことができますか?変更をClojureツリーのサブセット(ハッシュマップ)で確認するにはどうすればよいですか?
3
A
答えて
1
私はツリー全体を見て、get-inでサブセットをチェックします。同じサブツリーを使用してサブツリーが変更されたかどうかを素早くテストできます。前の状態に対してテストする。私は確信して、私は非常に頻繁にウォッチャーを使用していない
(defn change-tester [tree path]
(let [orig (get-in tree path)]
(fn [tree]
(not (identical? (get-in tree path) orig)))))
のようなものは、私は構文を知らないが、あなたは何とか上記の機能を付けることができます。
2
Clojureマップは不変なので、概念的な観点からは、ツリーの単一の部分を変更することは実際にはありません。
しかし私は良いオプションのカップルを見ることができます:
- をツリー全体に時計を追加しますが、興味のある特定の部分が変更されたかどうかをテストします。これは非常に迅速かつ簡単にテストする必要があります(ツリーの正しい部分を検索するために "get-in"を使用)
- ヘルパー関数
1
Clojureマップは、スレッドセーフであることを意味しています。これは良いことです。 'assoc'などで変更すると、変更された値が存在する新しいコピーが作成されます。 (完全なコピーは作成されていませんが、コピーを作成するには効率的な手法が採用されています)。
おそらく、あなたが望むことを実行する最良の方法は、独自のデータ構造を作成することです。あなたはJavaのように変更可能なHashMapを要求していますが、Clojureマップは要求していません。
'put'と 'putAll'メソッドをオーバーライドする既存のJava HashMapの周りにラッパーを作成して、変更内容を検出できるようにすることができます。 HashMap内にHashMapがある場合は、サブHashMapを新しいタイプにして、どのレベルでも変更を検出できるようにします。
「WatchfulHashMap」のように呼び出すこともできます。したがって、どこでもあなたのアプリ内から、それの単一のインスタンスが変更すること
(def m (ref (WatchfulHashMap.)))
:次に、あなたのようなこの新しいHashMapのインスタンスを作成することになるでしょう。
関連する問題
- 1. 挿入/更新時にデータベースの変更を確認するにはどうすればよいですか?
- 2. FOSUserBundleで確認メールのテンプレートを変更するにはどうすればよいですか?
- 3. ChromeのすべてのCSS変更を確認するにはどうすればよいですか?
- 4. Google Chrome拡張機能のタブの変更を確認するにはどうすればよいですか?
- 5. 変数が存在するかどうかを確認するにはどうすればよいですか?
- 6. サウンドカードのサンプルレートを確認/変更するにはどうすればよいですか?
- 7. Magento Searchを変更して子スキューを確認するにはどうすればよいですか?
- 8. JavaScriptでファイルサイズを確認するにはどうすればよいですか?
- 9. kivyでキーボードイベントを確認するにはどうすればよいですか?
- 10. IIS7でリクエストタイプを確認するにはどうすればよいですか?
- 11. WPFでカーソルサイズを確認するにはどうすればよいですか?
- 12. このハッシュマップをソートするにはどうすればよいですか?
- 13. Google認証エンジンで認証と承認を変更するにはどうすればよいですか?
- 14. テンプレートパラメータのタイプを確認するにはどうすればよいですか?
- 15. アプリのフレームレートを確認するにはどうすればよいですか?
- 16. openCLのリファレンスカウンタを確認するにはどうすればよいですか?
- 17. ghcのバージョンを確認するにはどうすればよいですか?
- 18. オブジェクトのタイプを確認するにはどうすればよいですか?
- 19. recvfrom()のメッセージサイズを確認するにはどうすればよいですか?
- 20. OpenMPIのバージョンを確認するにはどうすればよいですか?
- 21. クライアントのNLS_LANGを確認するにはどうすればよいですか?
- 22. 変数が存在するかどうかを確認するにはどうすればいいですか?
- 23. Drupalログファイルを確認するにはどうすればよいですか?
- 24. 重複数を確認するにはどうすればよいですか?
- 25. 確認メールを作成するにはどうすればよいですか?
- 26. ルートDNSトラストアンカーを確認するにはどうすればよいですか?
- 27. ユーザーがindex.htmlにいるかどうかを確認するにはどうすればよいですか?
- 28. ビュー内でインスタンスエンティティが変更されているかどうかを確認するにはどうすればよいですか?
- 29. ポップアップページが開いているかどうかを確認するにはどうすればよいですか?
- 30. ファイルが他のプロセスによって変更されたかどうかを確認するにはどうすればよいですか?
申し訳ありませんが、私は、ツリーが参照 – Zubair