`
由 wolfe.a.jason 报告,2009 年 2 月 4 日
描述此功能/更改。
将“keyset”添加到 Clojure 中;使 APersistentMap 的 .keySet 返回一个
IPersistentSet
此问题在群组中讨论过吗?如果是这样,请提供讨论的链接
链接
http://groups.google.com/group/clojure/browse_thread/thread/66e708e477ae992f/ff3d8d588068b60e?hl=en#ff3d8d588068b60e
附上一个补丁。一些说明
我选择添加一个“keyset”函数,而不是改变现有的“keys”,
以避免破坏任何东西。
相应的 RT.keyset 函数只是对参数调用 .keySet。
我本想使“keyset”返回 IPersistentSet,即使传递的是
(non-Clojure) java.util.Map,但因为本质上与上述线程中提到的
相同的限制(由于 Map 接口不支持 getKey() 或 entryAt()),这在
亚线性时间内似乎是不可能的 --
再次假设“get”应该返回集合中的实际(相同的?)
键,而不是仅仅是 .equal 键。
然后我更改了 APersistentMap 的 .keySet 的实现,使其基本上
复制 APersistentSet。一个更简洁的替代方案是扩展 APersistentSet 并
覆盖 .get 方法,但这对我的影响有些担心(因为如果 APeristentSet 改变
了,可能会破坏)。
无论如何,这是我为 Clojure 的 Java 端编写的第一个补丁,而且我
对约定和美学还没有完全确信,所以
评论/问题/批评/要求修订都是非常受欢迎的。
`