评论由:alexmiller 提出
在这个问题上,没有必要争论名字 - Rich 无论如何都会有他自己的看法。
关于补丁
- 移除 :static 元数据,因为不再使用它
- 需要文档字符串,应遵循其他 Clojure 文档字符串的风格。map 是获取灵感的良好地方。
- 而不是立即声明这些项,推迟它们的定义,直到需要这些项。没有必要为了这项功能添加更多的声明。
还有其他可能的实现 - 这些应该在一系列输入大小上进行性能对比。除了当前的方法,我还将调查
- 使用 reduce-kv 将信息结构化到临时映射中。这允许映射自己进行缩减(无需缓存序列),并且避免了只创建条目然后再拆分开来的情况。
- 使用 transducers 与 (into {} (map ...) m)
还应考虑
- 是否构建一个键/值向量并将其转换为映射,或者直接构建映射(前者可能更快,但不确定)
- 如果构建映射,如何构造映射条目(向量或直接创建 MapEntry 对象)
- 在 map-keys 中,当 map 生成新重叠键时,是否存在任何开放性问题?
- 在现有的核心代码中,是否有地方可以使用 map-keys/map-vals(我非常确定有)