【发布时间】:2010-09-19 12:11:21
【问题描述】:
我有一个名为 bag 的 defrecord。它的行为类似于要计数的项目列表。这有时称为频率或人口普查。我希望能够做到以下几点
(def b (bag/create [:k 1 :k2 3])
(keys bag)
=> (:k :k1)
我尝试了以下方法:
(defrecord MapBag [state]
Bag
(put-n [self item n]
(let [new-n (+ n (count self item))]
(MapBag. (assoc state item new-n))))
;... some stuff
java.util.Map
(getKeys [self] (keys state)) ;TODO TEST
Object
(toString [self]
(str ("Bag: " (:state self)))))
当我尝试在 repl 中要求它时,我得到:
java.lang.ClassFormatError: Duplicate interface name in class file compile__stub/techne/bag/MapBag (bag.clj:12)
发生了什么事?如何在我的包上获得钥匙功能?我是否也可以通过假设 clojure 的 keys 函数最终在作为其参数的地图上调用 getKeys 来以正确的方式解决这个问题?
【问题讨论】:
标签: clojure protocols frequency census