评论者:petterik
摘要
我认为值得调查是否存在具有相同效果的更小的补丁。我会看看我能做什么!
目标
问题得到评估后,尝试最小化补丁的大小。
问题
代码some
需要在代码reduce
中实现reduced
以能够停止减少过程。clojure.core中有两个reduce的实现,即reduce
和reduce1
,其中reduce
实现了reduced
,而reduce1
没有。定位一个代码some
、reduce1
和/或reduce
结合,使得some
能够访问实现了reduced
的reduce函数。
尝试通过 (declare reduce)
声明 reduce
并失败,我记得是这样的(将再次验证此方法)。
旧方法
由于 some
在位置上位于 reduce
之上,因此不可访问,所以专注于实现 reduce1
以使用 reduced
。这需要移动 deref、deref-future 以及其他一些元素,导致一个大补丁。
新方法
通过以下方式之一来减小补丁大小:
1a. 将 some
(以及 every?
)移到 reduce
之下。
1b. 将 some
(以及 every?
)向下移动,将 reduce
向上移动。
1c. 将 reduce
移到 some
(以及 every?
)之上。
2. 创建类似于对 reduce
的 some
和 some1
,其中基于 reduce
的 some
将位于 reduce
之下。
3. ?
我不喜欢第2点,认为它创建了更多像 reduce1
那样的函数重复。我希望我们能通过第1x获得一个小补丁。