【发布时间】:2016-01-30 15:13:34
【问题描述】:
我给一个函数两个参数,一个从列表中删除的元素 f 和集合。 (集合也是一个原子)
(defn playCard [f coll]
(let [c (first (filter f @coll))]
(println coll)
(println c)
(swap! ((remove #{c} #{coll}) @coll)) ;;here
(println coll)
(println "DIVIDER")
))
我可以成功得到f。但是当我尝试从列表中删除它时,我收到错误:“ClassCastException clojure.lang.LazySeq 无法转换为 clojure.lang.IFn”。
在我的工作中,我经常收到类似的错误。我不确定如何解决它。任何帮助,将不胜感激。
正在处理的结构是:
可用卡片的哈希图:
(def cards
(hash-map
:card1 {:name "Wisp" :damage 1 :health 1 :cost 0 :charge "t"}
:card2 {:name "Spider Tank" :damage 3 :health 4 :cost 3}
:card3 {:name "Boulder Fist Ogre" :damage 6 :health 7 :cost 6})
)
这些牌的列表(手牌):
(def hand1
(list (get cards :card1) (get cards :card2) (get cards :card3) (get cards :card1)))
playCard 函数被赋予了牌名和手牌。
【问题讨论】:
-
你为什么要传入 coll,然后让它成为你立即取消引用的原子?然后你又把它取消为 d?您只是想从集合中删除一个项目吗?
-
在某个时候,我开始绝望地投入额外的变量。但是,是的,我确实想从集合中删除一个项目。然而,该集合在其他地方被定义为原子。
-
#{coll}对我来说似乎很奇怪。也许你可以在没有原子的情况下开始,然后进行删除,然后从那里开始构建......