2024 年 Clojure 调查问卷! 中分享您的想法。

欢迎!请查看 关于 页面以获取更多有关此工作方式的信息。

0 投票
Clojure

Dorun 可以调用为 (dorun n coll)。以这种方式调用时,dorun 会强制从 coll 中获取 n+1 个元素,这似乎不太直观。尽管如此,我并不一定认为这是一个缺陷。因为它并没有偏离文档中的行为,因为根本就没有文档说明——该函数的两个参数形式在文档字符串中未提及。

`
user=> (defn printing-range [n] (lazy-seq (println n) (cons n (printing-range (inc n)))))

'user/printing-range

user=> (dorun 0 (printing-range 1))
1
nil
user=> (dorun 3 (printing-range 1))
1
2
3
4
nil
`

2 答案

0 投票

评论由 stu 提供

我认为这不是一个 bug,因为这是由 seq 的普遍语义引起的,而不仅仅是 dorun。考虑

(def x (seq (printing-range 0))) 0

即只是调用 seq 就会消费第一个元素。我将其作为改进文档字符串的功能请求留出。

0 投票
参考: https://clojure.atlassian.net/browse/CLJ-1655 (由 michaelblume 报告)
...