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