欢迎!请参考关于 页面来了解此功能的一些更多信息。
如果您将非正数 'n' 或 'step' 传递给 partition,您将获得一个无限循环。以下是一些示例
(partition 0 [1 2 3])(partition 1 -1 [1 2 3])
原因:partition 和 partition-all 并未检查 n 和 step 是否为正数。
方法:在 partition 和 partition-all 中添加检查,确保 n 和 step 为正数。
补丁:clj-1647_3.patch
预审查:由 Alex Miller
评论者:alexmiller
另见 CLJ-764
完成时需要性能检查。
评论者:kworam
修复 clj-1647 的补丁文件
由于'n'和'step'在整个递归自调用过程中保持不变,我只需在初始调用时验证它们一次为正即可。
因此,我创建了名为'internal-partition'和'internal-partition-all'的函数,其实现与当前版本的'partition'和'partition-all'相同。
然后,我将'partition'和'partition-all'函数的先决条件添加到'step'和'n'必须为正,并让它们分别调用'internal-partition'和'internal-partition-all'来完成工作。
在这个补丁中有很多无关的空格更改——你能提供一个只包含问题更改的更小的补丁吗?还需要测试。
我将提供一个不带空格更改的补丁文件。
我知道在test_clojure\sequences.clj和test_clojure\transducers.clj中有关于'partition'和'partition-all'的一些现有功能测试。我不认为我需要添加更多功能测试,但我认为我应该添加
你能给我一些建议,告诉我如何开发和添加这些测试吗?
你应该将#1添加到补丁中。对于#2,你只需在(criterium是此类任务的优秀工具)之前/之后进行计时,并在描述中放置结果即可。
你运行过 mvn clean?还是 rm target?
是的,我运行了 mvn clean 并在执行交互式测试之前检查了 clojure-1.7.0-master-SNAPSHOT.jar 的预期日期和时间戳。我还对我的 MacBook 做了回溯,因为可能存在 Windows 特定的构建问题。
我对 partition-all 的更改按预期工作,但对 partition 的更改却不行。然而,如果我将 (source partition) 调用的结果复制并执行它(将 clojure.core/partition 替换为 user/partition),user/partition 也能按预期工作。我不明白为什么对 clojure.core/partition 的更改没有生效。
评论者:jafingerhut
Kevin,我不知道你的 Clojure 源树的历史,但如果你在其中运行过 'ant',它会在根目录中创建 jar 文件,而 'mvn package' 会在目标目录中创建它们。从你上面的较长评论中不清楚你运行的 'java -cp ...' 命令是否指向了目标目录中的 jar 文件。这可能不是你遇到问题的原因,但我还没有其他猜测。
这个状态如何?
Alex,我最近搬到了西雅图,并在微软找到了一个长期职位。这让我非常忙碌,我几乎没有时间和Clojure度过。我可能还需要一个月到两个月的时间才能再次专注于Clojure。
谢谢你的提醒。
评论者:alexisimport
Kevin,Alex,如果你喜欢,我可以接管这个任务吗?