バッグと呼ばれる記録抹消があります。カウントする項目のリストのように動作します。これは、頻度または国勢調査と呼ばれることもあります。次のことができるようになりたい
(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 を呼び出すと仮定して、これを正しい方法で行っていますか?