我继承了一些执行以下操作的Java代码:
1)它从Clojure接收一个LazySeq对象(由许多PersistentHashMap对象组成)
2)然后它将相同的LazySeq对象(未更改)传递回Clojure脚本,在该脚本中将其转换为String并传递回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,但是找不到修改(或添加)元素的方法。
谢谢,
克里斯
答案 0 :(得分:0)
简答:你做不到。 1}}和Clojure中的LazySeq
是不可改变的。
更长的回答:一般来说,Clojure代码对它所接收的列表对象的确切类型做了很少的假设 - 大部分内容都适用于PersistentHashMap
,如果你不想打扰它与其他Clojure类型相比,实现起来相当简单。
因此,您需要创建一个实现ISeq
的类,并在其父ISeq
运行时返回已转换的PersistentHashMap
。实例化该类并将其传递给LazySeq
。