我繼承一些Java代碼,執行以下操作:Clojure的修改LazySeq
1)它從Clojure的接收LazySeq對象(其由多個PersistentHashMap對象)
2)它然後傳遞這個相同的LazySeq對象(不變)返回到Clojure腳本,在那裏它被轉換爲一個字符串並傳回到Java
問題是在步驟(1)之後和步驟(2)之前的Java代碼中,我需要修改LazySeq中的一些PersistentHashMap對象,然後繼續執行步驟(2)。喜歡的東西:
LazySeq seq = clojureFunctionReturningLazySeq();
//update the elements of the sequence
String result = clojureFunctionReceivingLazySeq(seq);
我不能修改Clojure的腳本本身和LazySeq的更新有Java代碼內發生。我檢查了LazySeq API,並找不到修改(或添加)元素的方法。
謝謝
克里斯
你可以把它當成一個可迭代的集合。 –
LazySeq和PersistentHashMap都是不可變的 - 實質上,您需要做的是根據傳遞的內容構建一個新的序列。在Java中執行此操作將是一項不重要的工作。 – Alex
@Alex對於例如把它變成一個ArrayList(ArrayList構造函數需要一個Collection),隨意改變ArrayList,並提供ArrayList,假設接收的Clojure代碼只需要一個Collection。 –