首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure修改LazySeq

Clojure修改LazySeq
EN

Stack Overflow用户
提问于 2014-01-18 02:49:27
回答 1查看 252关注 0票数 1

我继承了一些执行以下操作的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应用程序接口,但找不到用于修改(或添加)元素的方法。

谢谢,

克里斯

EN

回答 1

Stack Overflow用户

发布于 2015-03-18 14:43:43

简短的回答:你不能。Clojure中的LazySeqPersistentHashMap是不可变的。

较长的答案:通常,Clojure代码对它接收的列表对象的确切类型几乎没有做任何假设-大多数事情都是针对ISeq的,如果您不想为其他Clojure类型而烦恼,那么实现起来相当简单。

因此,您需要创建一个实现ISeq的类,并在遍历其父LazySeq时返回转换后的PersistentHashMap,实例化该类并将其传递给clojureFunctionReceivingLazySeq(seq)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21193572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档