欢迎!请参阅关于页面以了解有关此工具更详细的信息。
clojure.walk中的条件调度速度慢,且不支持扩展。在CLJ-1105之前,它不支持记录。
方法: 使用协议重新实现clojure.walk。公共API没有变化。用户可以根据需要扩展{{walk}}协议到其他类型(例如Java集合)。与CLJ-1105一样,这个版本的clojure.walk支持记录。
补丁: 0002-CLJ-1239-protocol-dispatch-for-clojure.walk.patch
性能: 我的测试表明,这比原始的clojure.walk快1.5x-2x。请参阅https://github.com/stuartsierra/clojure.walk2以获取基准测试。
风险: 这种方法可能存在破坏依赖于旧clojure.walk类型特定行为的用户代码的风险。当运行完整的Clojure测试套件时,我发现(并修复)了一些在clojure.walk单元测试中没有显示出来的破坏。例如,请参阅(链接:https://github.com/stuartsierra/clojure.walk2/commit/730eb756dcc424aa535d0872bd626079955c3892 文本:clojure.walk2中的730eb75提交)。
评论由:vmarcinko发表
看起来,目前遍历树并替换表单不会保留数据结构中包含的元数据。
评论由:jafingerhut发表
补丁0001-CLJ-1239-protocol-dispatch-for-clojure.walk.patch自2013年11月22日提交CLJ-1105修补程序以来不再干净地应用于最新的Clojure master。根据描述,似乎意图是此修补程序或该修补程序,而不是两者,因此我无法确定应如何处理此修补程序,甚至此票据。
评论人:alexmiller
此补丁和条目仍然可以用于未来的发布。
评论人:stuart.sierra
添加了新的补丁,该补丁在CLJ-1105之后应用于最新的master。
@Chouser,您可以为此提出一个新的票证吗?从已关闭的条目的评论中管理对某项工作的努力是非常困难的。
@Chouser - 没关系!我在想这是进入1.6的更改。继续吧。 :)
评论人:bronsa
Alex,对于此事而言,clojure-1.6.0在CLJ-1105之后表现出了与Chouser所描述的此补丁相同的行为。
评论作者:glts
当前 clojure.walk 的实现没有保留元数据。
如果将来重新审查这个新实现,最好也在可能的情况下保留元素上的元数据。