我想扩展Clojure priority-map以支持有限容量的优先级映射。一旦使用大小初始化优先级映射,如果当前计数等于映射的容量,它将基于优先级在assoc期间丢弃其他项。
我正在考虑使用deftype实现这个并改变assoc的实现。但我不确定这是否是最佳方式,或者是否可以仅覆盖assoc和进入操作。
真正了解任何反馈意见。
答案 0 :(得分:1)
您可以使用Zach Tellman的potemkin库,特别是其def-map-type
宏来定义其中包含优先级映射的自定义地图类型。您只需要为get
,assoc
,dissoc
和keys
提供明确的实现 - 所有其他Clojure和Java方法都将自动为您实现。根据您的使用案例,get
,dissoc
和keys
几乎可以委托给内部优先级映射,而assoc
则会实现删除逻辑。
您可能还想查看core.cache,它使用优先级映射来实现其缓存类型。