在java中,我可以这样做:
myList.add(myObj);
然后像这样删除它
myList.remove(myObj);
这可以通过使用equals
方法并检查myList
中的每个元素的等效性来实现。
在clojure中,我可以这样做:
(def myvec [myrecord])
但我无法使用myrecord
从myvec
删除remove
,如下所示:
(remove myrecord myvec)
因为我收到错误:
ClassCastException myproj.Task cannot be cast to clojure.lang.IFn clojure.core/complement/fn--4611 (core.clj:1392)
如何以类似于java方法的方式从向量中删除记录?
答案 0 :(得分:4)
Remove需要一个运行在集合中每个项目上的函数,它只保留函数返回falsey值的项目。在您的情况下,通过告诉您对象不是函数,错误消息是正确的。
您可以显式编写在对象上使用equals
的函数,也可以将要删除的对象添加到集合中。集合充当一个函数,当它的输入是该集合的成员时,它返回一个真值。
(remove #{myrecord} myvec)
一个具体的例子
(remove #{4 3} [1 2 3 4])
;=> (1 2)