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

谢谢solve这个谜团,Matthew!

0

评论者:alexmiller

补丁看起来基本没问题。一些小改动

  • internal-partition和internal-partition-all应该用{{defn-}}标记为私有。
  • 提交说明应从"CLJ-1647"开始。
0

评论者:mjg123

我添加了clj-1647_2.patch以替换此问题上的其他补丁。Jira引用已添加到提交信息和尽可能使用(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 报告)
...