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

欢迎!有关如何使用此信息,请参阅关于页面获取更多信息。

0 投票
Clojure

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

(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

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 报告)
...