请分享您的想法,参与 2024 Clojure 状态调查!

欢迎!请参阅 关于 页面,了解更多此功能的信息。

0 投票
文档

将元数据应用于 lazy-seq 会导致实现

(def x (vary-meta (lazy-seq (prn :realized)) assoc :foo :bar)) :realized

这可能令人惊讶,因此修改 lazy-seq 的文档字符串以提及这一点。

补丁

7 答案

0 投票

由 alexmiller 添加的评论:

我认为这里很可能调用了 seq(),这样旧的 LazySeq 实例和新的实例将共享序列。否则,预元和后元版本的函数调用将针对相同的输入执行相同的操作,但将是断开的,这似乎不好。

0 投票

由 alexmiller 添加的评论:

我不是很确定这个应该在哪里记录。也许在 https://clojure.org/metadata 页面?

0 投票

由 mpenet 添加的评论:

是的,这在 lazy-seq 的文档字符串中也有道理。

0 投票
by

由 alexmiller 添加的评论:

我在元数据页面上增加了一句话,并将描述更新为更符合这里的文档字符串更改。

0 投票
by

评论由:michaelblume提供。

在这个补丁中,with-meta不会实现在seq,但实现仍然只发生一次--这会不会是可接受的方案?

0 投票
by

评论由:michaelblume提供。

添加了测试。

0 投票
by
参考:[https://clojure.atlassian.net/browse/CLJ-1800](https://clojure.atlassian.net/browse/CLJ-1800)(由mpenet报告)
...