我继承了一些执行以下操作的Java代码:
1)它从Clojure接收一个LazySeq对象(由许多PersistentHashMap对象组成)
2)然后,它将这个相同的LazySeq对象(未更改)传递回Clojure脚本,在脚本中将其转换为字符串并传递回Java
问题是,在步骤(1)之后的Java代码中,在步骤(2)之前,我需要修改LazySeq中的一些PersistentHashMap对象,然后继续执行步骤(2)。类似于:
LazySeq seq = clojureFunctionReturningLazySeq();
//update the elements of the sequence
String result = clojureFunctionReceivingLazySeq(seq);
我不能修改Clojure脚本本身,LazySeq的更新必须在Java代码内部进行。我检查了LazySeq应用程序接口,但找不到用于修改(或添加)元素的方法。
谢谢,
克里斯
发布于 2015-03-18 14:43:43
简短的回答:你不能。Clojure中的LazySeq和PersistentHashMap是不可变的。
较长的答案:通常,Clojure代码对它接收的列表对象的确切类型几乎没有做任何假设-大多数事情都是针对ISeq的,如果您不想为其他Clojure类型而烦恼,那么实现起来相当简单。
因此,您需要创建一个实现ISeq的类,并在遍历其父LazySeq时返回转换后的PersistentHashMap,实例化该类并将其传递给clojureFunctionReceivingLazySeq(seq)。
https://stackoverflow.com/questions/21193572
复制相似问题