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

欢迎!有关如何工作的更多信息,请参阅 关于 页面。

0
Clojure

给定一个包含一个固定参数和可变参数的函数,对于 apply 而言,仅强制评估 2 个元素就足够知道它应该选择哪个参数数量,但它目前强制评估 3 个元素。

`
user=> (defn x ([a & b]))

'user/x

user=> (apply x (map println (iterate inc 0)))
0
1
2
nil
`

这使得使用 apply 的惰性函数(例如 mapcat)比可能的情况更加非惰性。
提议的修复方案在 seq 计数大于最大固定参数后立即短路 RT.boundedLength

`
user=> (defn x ([a & b]))

'user/x

user=> (apply x (map println (iterate inc 0)))
0
1
nil
`

2 个答案

0

评论人:bronsa

此票证中的补丁略微改善了在 http://dev.clojure.org/jira/browse/CLJ-1218 中报告的问题。

0
参考:https://clojure.atlassian.net/browse/CLJ-1583(由 bronsa 报告)
...