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

欢迎!请参见 关于 页面了解更多关于这个网站的信息。

0
Clojure

如果你将 'n' 或 'step' 的非正数值传递给 partition,则会得到无限循环。以下是一些示例

(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
by

评论由:alexmiller

对不起,浏览器失败了 :)

0
by

评论者:kworam

感谢Matthew您对此事的关注,我很感激!

0
by

评论者:kworam

感谢Matthew您对此事的关注,我很感激!

0
by
_ 评论者:alex+import_

新补丁:clj-1647.patch

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

Kevin,您的补丁之所以适用于partition-all但不适用于partition,是因为partition在启动过程中定义得比较早,并且{:pre .. :post ..}映射在稍后增强之后才会被defn读取。
0
by

评论者:kworam

感谢Matthew解决这个问题神秘的事!

0
by

评论由:alexmiller

补丁大致良好。一些小改动

  • internal-partition和internal-partition-all应该使用{{defn-}}标记为私有。
  • 提交描述应以"CLJ-1647"开头。
0
by

评论由: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](https://clojure.atlassian.net/browse/CLJ-1647)(由 kworam 报告)
...