欢迎!请参阅 关于 页面以获取更多关于如何使用本站的信息。
目前比较两个非相同序列需要遍历两个序列逐个比较值,忽略序列 a 和 b 可能有相同的(指针相等的)剩余部分的可能性。
a
b
提议的补丁在序列尾部添加了一个指针相等检查,如果返回测试结果为真,可以短路等性检查,这在比较共享公共子序列的较大(或者可能是无限)序列时非常有用。
此补丁后,类似以下比较 (let [x (range)] (= x (cons 0 (rest x))))目前不会终止,将立即返回 true。
(let [x (range)] (= x (cons 0 (rest x))))
补丁: CLJ-1679-v3.patch
评论由:michaelblume 提出
当这个测试失败时(它在我的 master 上失败,但我还有一大堆其他开发补丁,我仍在试图找出冲突点),它会永远挂起。也许最好是检查未来的等性并超时未来会更好?
就是这样 =)
评论由:bronsa 提出
很有道理,感谢更新补丁
嗯,之前的补丁有一个问题,报告逻辑仍然尝试强制执行序列和 OOMs,这个补丁阻止了这种情况。
好吧,看起来 CLJ-1515、CLJ-1603 和这个补丁一起组合会导致失败,尽管其中任意两个都可以正常工作。
(实际上这个补丁的源代码并没有问题,它仍然可以很好地短路到 = 存在结构共享的地方,只是其他两个补丁破坏了范围的结构共享,所以测试失败)
明白了,我想如果我们应用这些票证的补丁,我们可能需要更改测试。