由:petterik 评论
总结
我认为调查是否有具有相同效果的小补丁是值得的。我会看看我能做些什么!
目标
由于问题已经过分类整理,尽量最小化补丁大小。
问题
some
需要实现reduced
在reduce
中来能够使减少过程停止。在clojure.core中有两个reduce实现,reduce
和reduce1
,其中reduce
实现reduced
且reduce1
没有。将some
、reduce1
和/或reduce
的组合放在适当的位置,使some
可以访问一个实现reduced
的减少函数。
尝试通过`(declare reduce)`声明reduce
并没有起作用,我想我知道(我将再次验证这种方法)。
旧方法
由于some
在上面的reduce
位置上,因此无法访问,所以重点关注将reduce1
实现为reduced
。这需要移动deref、deref-future和其他一些内容,结果产生了一个相当大的补丁。
新的方法
通过以下方法来减小补丁大小:
1a.将some
(和every?
)移动到reduce
下面。
1b.将some
(和every?
)向下移动,而将reduce
向上移动。
1c.将reduce
移动到some
(和every?
)的上面。
2. 创建some
和some1
,就像对reduce
所做的那样,其中基于reduce的some
将位于reduce
之下。
3. ?
我不是很喜欢第2种方法,因为会创建更多如reduce1
一样的函数 duplication。我希望我们可以通过1x获得一个小补丁。