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

我认为这不是一个错误,因为它是由{{seq}}的普遍语义所引起的,而不仅仅是{{dorun}}。考虑

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

即仅调用{{seq}}就消耗了第一个元素。我将其保留作为一个 Feature Request 以改进文档字符串。

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