- 一個Clojure的數據結構,我們稱之爲
dom
,向量的樹和無限期深度 地圖; - 其中一個特定的節點,我們稱之爲
focus
節點,簡稱爲 進入樹的路徑:一系列密鑰,例如你可以提供給get-in
。
我會在一個函數的聚焦點上決定,我想以某種方式代表可以傳遞給另一個函數在不違反不變性,是不是在某種程度上的方式聚焦節點的這種選擇與Clojure持久的數據結構衝突。
當我遍歷樹,我想不同的方式對待focus
節點:例如,如果我打印的樹,我可能要打印focus
節點大膽。
如果我使用C或Java,我可以保存指向/ focus
節點的指針/引用,我可以在遍歷樹時與當前節點進行比較。我不認爲這是做Clojure中以正確的方式:感覺哈克,我敢肯定有一些方法來做到這一點,它利用Clojure的持久數據結構。
該解決方案必須在Clojure和ClojureScript中工作。
我能想到的選項是:
- 存儲參考並覈對。
- 將標記附加到相關節點。
同時遞歸到樹中並沿着標記節點的路徑。
- 選項(1)沒有吸引力,正如我已經解釋過的。
- 選項(2)似乎是最好的,並給予持久的數據結構無痛苦。
- 選項(3)與選項(2)類似,不同之處在於它將標記和遍歷步驟組合在一起。
我確定這是一個常見問題。有沒有標準的解決方案?
我想你可以使用元數據來實現2,但我不知道一個通用的解決方案 –
謝謝。我可以使用元數據,但可能不會。這個問題比實施更廣泛一些。 – Joe
重新閱讀這篇文章絕對不會讓人感到痛苦,但我不認爲我在問一個主要基於意見的問題。完全有可能(並且我無法知道)有這樣做的標準慣用模式。如果答案是「否」,那麼這是一個有效的答案。 – Joe