2024 年 Clojure 状态调查!中分享您的想法。

欢迎!请查看关于页面以了解更多关于这是如何工作的信息。

0
Clojure

如果您传递给 partition 一个非正数 'n' 或 'step',您会得到一个无限循环。以下是一些例子:

(partition 0 (link: 1 2 3))
(partition 1 -1 (link: 1 2 3))

原因:partition 和 partition-all 并不会检查 n 和 step 是否为正数。

方法:在 partition 和 partition-all 中添加检查以确保 n 和 step 为正数。

补丁:clj-1647_3.patch

预审人:Alex Miller

29 个答案

0

由 alexmiller 发表评论:

去做吧

0

由 alexmiller 发表评论:

去做吧

0

由 alexmiller 发表评论:

去做吧

0

由 alexmiller 发表评论:

去做吧

0

由 alexmiller 发表评论:

抱歉,浏览器失败 :)

0

评论由:kworam

感谢你指出这个问题,Matthew,我真的很感激!

0

评论由:kworam

感谢你指出这个问题,Matthew,我真的很感激!

0
_评论由:alex+import_

新补丁:clj-1647.patch

包含测试,空格更改较少,手动抛出IAEs。我很快会做一些基本的基准测试,尽管我预计开销相当低,因为我们只检查一次参数。

Kevin,你的补丁在partition-all上工作,但在partition上不行,是因为partition在启动过程中定义得比较早,而{:pre .. :post ..}映射在稍后增强之前不会被defn读取。
0

评论由:kworam

感谢你解决这个神秘问题,Matthew!

0

由 alexmiller 发表评论:

补丁看起来基本不错。一些小的改动

  • internal-partition 和 internal-partition-all 应当用 {{defn-}} 标记为受保护的。
  • 提交描述应以 "CLJ-1647" 开头
0

评论由:mjg123

我为这个问题添加了clj-1647_2.patch以取代其他补丁。Jira引用已添加到提交信息中,并在可能的地方使用了defn(defn在某个私有函数之后定义,但手动添加了^:private元数据)

0

由 alexmiller 发表评论:

该补丁将add-annotation从defn-改为defn,但这似乎与补丁的意图无关?

0

评论由:mjg123

感谢 Alex 这样迅速地查看 - 对于 add-annotation 中的错误表示歉意。请看 clj-1647_3.patch

0
参考: https://clojure.atlassian.net/browse/CLJ-1647(由 kworam 报告)
...