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

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

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

补丁更改了从defn-到defn的add-annotation,但这似乎与补丁的意图无关?

0 投票

评论由:mjg123提交

感谢你这么快就看了,Alex - 对add-annotation中的那个错误感到抱歉。请见clj-1647_3.patch。

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